xdg-open
é apenas um script de shell que detecta o Desktop Environment e chama o programa correspondente (gvfs-open para gnome, exo-open para XFCE, mate-open, etc.)
Portanto, as limitações para iniciar um executável são derivadas do launcher correspondente de cada DE, que é gvfs-open no seu caso.
Olhando para página de manual gvfs-open , este aplicativo ( semelhante aos outros aplicativos DE) apenas chama o aplicativo padrão registrado por tipo de arquivo, conforme definido por gvfs-mime
settings.
No seu caso, o gvfs-open tenta (e falha) encontrar um aplicativo correspondente para iniciar um firefox file
.
Se você executar o xdg-open (ou gvfs-open) com um link html como https://www.google.com
, então deve funcionar corretamente; O gvfs-open pesquisará o banco de dados mime para descobrir como lidar com o link html, o mime irá avisar para chamar o firefox e o firefox será chamado.
Analisando as funções de script de shell xdg-open, há algumas funções que extraem a entrada Exec
do arquivo .desktop
correspondente e, em alguns ambientes de desktop, o comando encontrado na seção Exec do arquivo .desktop é executado é pelo xdg-open.
Em outras palavras, você não precisa chamar xdg-open
ou gvfs-open
para iniciar executáveis como o firefox.
Basta iniciar o "firefox" e deve ser executado (por exemplo,popen "/usr/bin/firefox"
)
PS: ou você pode até precisar chamar (exec firefox &)
Você pode até extrair entradas do Exec por todos os arquivos .desktop com um loop grep como este:
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