这是我尚未找到解决方案的通用问题的具体示例。
我有一个程序(Android 虚拟设备管理器),它从自身内部启动“子程序”(即模拟器或虚拟设备)(也可以从其他地方启动)。我希望将这些程序的任何一个实例分组在同一个 Unity 图标下。
我创建了一个.desktop文件来尝试完成此操作,但不完全知道如何执行此操作。桌面文件如下:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Android Virtual Device
Icon=/home/ben/.icons/android.svg
Exec=/home/ben/usr/bin/android avd
StartupWMClass=Android Virtual Device Manager
Run Code Online (Sandbox Code Playgroud)
据我所知,StartupWMClass我需要设置才能正确实现这一目标。我已经获得了xprop WM_CLASS在相应窗口上使用的两个类名(“Android 虚拟设备管理器”和“emulator64-arm”)。两者都可以单独工作(无论以何种方式启动,启动器图标都正确附加到程序上),但我无法让它同时适用于两者。
我假设我以某种方式需要设置两个值,StartupWMClass但无法正确执行(或知道它是否是有效操作)。我试过,冒号分隔如环境变量、逗号分隔、引号等,但我在官方文档中找不到任何提示。
有什么建议?
编辑:
另一个更迂腐但可能更容易识别的例子是Matlab. 我正在运行 2013a 并且最初显示的启动画面和程序具有完全不同的WM_CLASS值。这意味着,当我单击其中的启动器StartupWMClass=com-mathworks-util-PostVMInit时,初始屏幕会出现一个不同的(默认未知)Unity图标,而其余图标则归入我的启动器下。
通过首先使用xprop WMCLASS并单击启动画面,然后重复活动Matlab会话,我得到以下终端输出:
ben@ben-OptiPlex-9010:~$ xprop WM_CLASS
WM_CLASS(STRING) = "MATLAB", "MATLAB"
ben@ben-OptiPlex-9010:~$ xprop WM_CLASS
WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "com-mathworks-util-PostVMInit"
Run Code Online (Sandbox Code Playgroud)
如果我可以指定以下内容:
StartupWMClass=com-mathworks-util-PostVMInit&&MATLAB
Run Code Online (Sandbox Code Playgroud)
这将完美地工作(因为两者都单独工作)但我不知道语法,如果它甚至存在的话。我只知道到目前为止我尝试过的一切都没有奏效。
无论哪种方式,任何帮助或明确的答案都会很棒,因为我相信这是运行良好的桌面的一个非常基本的元素。
我正在创建.desktop用于 Unity Launcher 的文件。
我在我的主目录中有我自己的位置,我将我的可执行文件 ( ~/usr/bin/) 正确添加到PATH我的.pam_environment文件中的环境变量中,如相关 Ubuntu 文档中指定的那样。
这是我的.pam_environment文件的内容:
LANGUAGE=en_AU:en_GB:en
LANG=en_AU.UTF-8
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_MONETARY=en_AU.UTF-8
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8
PATH DEFAULT=${PATH}:~/usr/bin/
Run Code Online (Sandbox Code Playgroud)
这导致我的PATH变量如下:
ben@ben-HPdv6:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~/usr/bin/:~/usr/bin/
Run Code Online (Sandbox Code Playgroud)
我知道它被附加了两次,但是.pam_environment无论使用我引用的 Ubuntu 文档中推荐的正确语法,文件中的任何内容似乎都被添加了两次。
这是问题的一个示例(所有情况都会发生)。我有一个运行 Eclipse IDE的脚本(称为eclipse)~/usr/bin/。
我可以打开任何终端并简单地输入eclipse,它运行得很好,就像你期望的那样。
但是当使用以下.desktop文件时:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Eclipse - Juno (4.2)
Icon=/home/ben/.icons/eclipse.svg
Exec=eclipse
Run Code Online (Sandbox Code Playgroud)
我收到错误:

但是当我将Exec=行更改为:
Exec=/home/ben/usr/bin/eclipse
Run Code Online (Sandbox Code Playgroud)
它完美地工作。
在 …