Запустить исполняемый файл с помощью 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 установлен еще и не установлен
  • xdg-open backend
  • Почему xdg-open удаляет @ из URI, если это первый символ в пути?
  • xdg-open только открывает Nautilus
  • kioclient KMimeTypeRepository :: родители: "/ usr / share / mime / subclasses" относится к неизвестному mimetype "application / vnd.ms-excel ..."
  • Установите приложение по умолчанию на основе имени файла, а не mimetype
  • xdg-open открывает другое приложение, указанное в запросе xdg-mime
  • xdg-open игнорирует мои определения приложений
  • Front-end для `~ / .config / mimeapps.list`
  • Почему среды рабочего стола создают пользовательские замены xdg-open?
  • Interesting Posts

    сервер osx, клиент Windows, запуск emacs открывает его на сервере, а не на клиенте

    Используя `find`, как я могу получить` rm` для печати более полного имени пути, чем при выполнении через `-execdir`?

    Системный звуковой сигнал не работает в TigerVNC

    изменение часового пояса в Oracle Solaris 11.2

    sudo su error messege через LDAP

    udev GROUP и MODE для символической ссылки не действуют

    Являются ли протоколы уровня 2 частью драйвера устройства NIC или NIC в ядре?

    Настройка сервера для обмена музыкой с телевизором

    Тройная загрузка Chromium Os, Ubuntu 14.10, Windows 7

    Отдельный сетевой трафик на двух сетевых интерфейсах

    Как программно добавить новый файл crontab без замены предыдущего

    привязка ключа tmux к содержимому панели панели программы

    Не удалось запустить файл локального скрипта с переменными через ssh

    Постоянно высокое, но уменьшающееся поведение ping на машине ubuntu

    Обновление ядра linux с 3 по 4 в Debian 8

    Linux и Unix - лучшая ОС в мире.