Использование StartupWMClass для приложений, работающих в терминале

Oct 04 2020

В 18.04 у меня была панель запуска в Dash для запуска приложения в терминале, при этом на панели Dash отображалась точка индикатора для средства запуска, когда она работала, а не индикатор для общей панели запуска терминала (таким образом я смог найти его, если остальные окна терминала открыты). Для этого мне удалось использовать параметр --class в записи Exec вместе с StartupWMClass.

В 20.04 программа запуска не работает, так как терминал открывается, приложение пытается запустить, а затем терминал закрывается. Я погуглил, и есть некоторые разговоры об обесценивании опции --class. Если я удалю параметр --class, программа запуска будет работать, но точка индикатора будет прикреплена к общей панели запуска терминала.

Вот файл .desktop перед удалением опции --class

[Desktop Entry]
Version=1.0
Type=Application
Terminal=true
Encoding=UTF-8
StartupNotify=true
Icon[en_US]=sage-terminal
Icon=sage-terminal
Exec=/home/rquint/Sage/SageMath/sage --class=SageTerminal
StartupWMClass=SageTerminal
Name=SageTerminal
Name[en_US]=SageTerminal
Actions=SageDocumentation;

[Desktop Action SageDocumentation]
Name=Sage Documentation
Exec=firefox /home/rquint/Sage/SageMath/local/share/doc/sage/html/en/index.html

Ответы

1 RichardQuint Oct 06 2020 at 00:10

Это не идеальное решение, но пока оно работает. Погуглил, я нашел следующее

https://itectec.com/ubuntu/ubuntu-how-to-make-a-custom-launcher-for-terminal-applications/

который показывает, как запустить приложение в терминале, хотя средство запуска использует Terminal = false. По сути, вы запускаете эмулятор терминала, который затем запускает приложение. У этого метода есть два возможных подводных камня. Во-первых, он специально вызывает конкретный эмулятор терминала; во-вторых, опция --class устарела и может не работать в будущем.

Итак, пока (Ubuntu 20.04.1 и Gnome 3.36.3) я заменил строки

Terminal=true
Exec=/home/rquint/Sage/SageMath/sage --class=SageTerminal

с участием

Terminal=false
Exec=gnome-terminal --class=SageTerminal -e /home/rquint/Sage/SageMath/sage

и вести себя так, как я хотел.