在终端中运行 .desktop 文件

在终端中运行 .desktop 文件

据我所知,.desktop文件是允许自定义应用程序设置的快捷方式。例如,我的/usr/share/applications/文件夹中就有很多这样的文件。

如果我在 中打开该文件夹nautilus,我只需双击其关联文件即可运行这些应用程序,例如双击firefox.desktop运行 Firefox。但是,我找不到通过终端执行相同操作的方法。

如果我这样做,它只会以文本文件的形式gnome-open foo.desktop打开。如果我将其设为可执行文件,然后在 bash 中运行它,它只会失败(这是预料之中的,它显然不是 bash 脚本)。 编辑:即使我将所有权更改为我自己,执行操作也会给我一条消息。如果我将其设为可执行文件并执行相同的命令,我正在使用的终端选项卡只会关闭(我猜它会崩溃)。最后,如果我这样做,我会收到错误报告。foo.desktop
exec /fullpath/foo.desktopPermission deniedsudo exec /fullpath/foo.desktopsudo: exec: command not found

这是我的问题,如何foo.desktop从终端运行文件?

答案1

gtk-启动

对于任何支持的最新 Ubuntu,gtk-launch只需转到

gtk-launch <file>

其中<file>是文件的名称,.desktop带或不带该.desktop部分。名称必须不是包括完整路径。

文件.desktop必须位于/usr/share/applications/usr/local/share/applications或中~/.local/share/applications

因此gtk-launch foo打开/usr/share/applications/foo.desktop(或foo.desktop位于其他允许的目录之一)。

gtk-launch 文档

gtk-启动使用给定名称启动应用程序。除非另有说明,否则应用程序将在默认屏幕上以适当的启动通知启动。

gtk-启动至少需要一个参数,即要启动的应用程序的名称。该名称应与应用程序桌面文件名匹配,如位于 /usr/share/application 中,带或不带“.desktop”后缀

可从终端使用或Alt + F2Alt + F2将命令存储在历史记录中,以便于访问)。

答案2

答案应该是

xdg-open program_name.desktop

但由于一个错误这里上游,于 2020-12-09 关闭)不再起作用。

答案3

现代答案

gtk-launch <app-name>- 其中<app-name>是文件的文件名.desktop,带或不带.desktop扩展名。

此主题中的另一个答案更多细节。 我从那个答案中得到了这个信息。

弃用的 shell 工具答案

很久以前写的 - 请参阅这个答案下面的评论,了解为什么这种方法对许多桌面文件不起作用。

运行的命令包含在桌面文件中,前面是,Exec=因此您可以提取并运行它:

$(grep '^Exec' filename.desktop | tail -1 | sed 's/^Exec=//' | sed 's/%.//' \
| sed 's/^"//g' | sed 's/" *$//g') &

打破这一局面

grep  '^Exec' filename.desktop    # - finds the line which starts with Exec
| tail -1                         # - only use the last line, in case there are 
                                  #   multiple
| sed 's/^Exec=//'                # - removes the Exec from the start of the line
| sed 's/%.//'                    # - removes any arguments - %u, %f etc
| sed 's/^"//g' | sed 's/" *$//g' # - removes " around command (if present)
$(...)                            # - means run the result of the command run 
                                  #   here
&                                 # - at the end means run it in the background

你可以把它放在一个文件中,比如说~/bin/deskopen内容

#!/bin/sh
$(grep '^Exec' $1 | tail -1 | sed 's/^Exec=//' | sed 's/%.//' \
| sed 's/^"//g' | sed 's/" *$//g') &

然后使其可执行

chmod +x ~/bin/deskopen

然后你可以这样做,例如

deskopen /usr/share/applications/ubuntu-about.desktop

参数(%u%F)很详细这里。它们都与在命令行启动无关。

答案4

虽然 OP 没有询问 KDE,但对于运行 KDE 的任何人来说,都可以使用以下命令:

kioclient exec <path-to-desktop-file>

在 Fedora 上,它包含在kde 运行时rpm。在 Arch 上,它位于kde-cli-工具(HT:@Aron Cederholm)。

相关内容