Запустить исполняемый файл с помощью xdg-open

Я пытаюсь написать функцию launchSystemFile которая работает как окна ShellExecuteEx из командной строки или из C ++.

Если я ShellExecuteEx blah.txt он открывается в редакторе по умолчанию. Если я ShellExecuteEx firefox.exe запускает исполняемый файл.

Я делаю из C ++ popen "xdg-open blah" и он отлично работает, за исключением исполняемых файлов.

Есть ли способ сделать xdg-open исполнять исполняемый файл? Например, Firefox на пути /usr/lib/firefox/firefox ?

Я попробовал xdg-open "/usr/lib/firefox/firefox" но это не удается с сообщением об ошибке:

gvfs-open: / usr / lib / firefox / firefox: место открытия ошибки: приложение не зарегистрировано как обработка этого файла

One Solution collect form web for “Запустить исполняемый файл с помощью xdg-open”

xdg-open – это всего лишь сценарий оболочки, который определяет рабочую среду и вызывает соответствующую программу (gvfs-open для gnome, exo-open для XFCE, mate-open и т. д.).

Таким образом, ограничения на запуск исполняемого файла выводятся из соответствующей пусковой установки каждого DE, которая является gvfs-open в вашем случае.

Если посмотреть на страницу gvfs-open man , это приложение (аналогично другим DE-приложениям) просто вызывает приложение по умолчанию, зарегистрированное для каждого типа файла, поскольку оно определяется настройками gvfs-mime .

В вашем случае gvfs-open пытается (и не удается) найти соответствующее приложение для запуска firefox file .

Если вы запустите xdg-open (или gvfs-open) с помощью html-ссылки, например https://www.google.com , тогда она должна работать правильно; gvfs-open будет искать базу данных mime, чтобы узнать, как обрабатывать html-ссылку, mime сообщит, что вы вызываете firefox, и вызывается firefox.

Рассматривая функции сценария xdg-open shell, есть некоторые функции, которые извлекают из Exec записи из соответствующего файла .desktop и в некоторых средах рабочего стола команда, найденная в разделе Exec файла .desktop, выполняется только как xdg-open ,

Другими словами, вам не нужно вызывать xdg-open или gvfs-open для запуска исполняемых файлов, таких как firefox.

Просто запустите «firefox» и должен быть выполнен (например, popen "/usr/bin/firefox" )

PS: Или вам может понадобиться позвонить (exec firefox &)

Вы даже можете извлечь записи Exec для всех файлов .desktop с помощью grep-цикла следующим образом:

 for file in "$(find /usr/share/applications/ -type f -name '*.desktop')"; do executable=$(grep -m1 "^Exec=" <<<"$file") #some files have more than one Exec entries echo "$file - $executable" done 
  • Почему xdg-open удаляет @ из URI, если это первый символ в пути?
  • Файл универсальной файловой ассоциации
  • Список всех ассоциаций расширения имени файла для данной программы
  • Какую программу использовать для открытия файлов? (gnome-open, gvfs-open, xdg-open и т. д.)
  • Как открыть все URL-адреса в моем браузере с помощью xdg-open?
  • xdg-open запускает как hexchat, так и Firefox
  • Есть ли команда FreeDesktop для открытия диалогового окна open-with, аналогичного xdg-open?
  • Как открыть файл в формате MIME?
  • Установить приложение xdg-open по умолчанию для терминальной программы
  • Почему xdg-open text_file отличается от sudo -u me xdg-open text_file?
  • Linux и Unix - лучшая ОС в мире.