Как изменить терминал по умолчанию для выполнения файлов .desktop?

May 11 2020

Я пытался запустить vim с alacritty по умолчанию. Я уже установил alacritty в качестве эмулятора терминала по умолчанию, и в моем vim.desktop я изменил его exec=vim %Fс помощью exec=alacritty -e vim %F. Проблема в том, что когда я открываю файл, он сначала выполняет команду в терминале gnome, а затем запускает vim в режиме реального времени, дело в том, что терминал gnome остается открытым. Я также пробовал создать сценарий:

#!/bin/bash
alacritty -e vim & disown | exit

это вообще не работает. Я не знаю, что еще делать, и ничего не могу найти в Интернете. Заранее спасибо!

Можно ли изменить терминал по умолчанию, запускающий Exec=команду? так что просто написав Exec=vim %F, он запускал

Ответы

4 Wonky May 11 2020 at 14:05

Муру помог мне прояснить, что происходит, спасибо! Проблема заключалась в том, что мой файл .desktop:

[Desktop Entry]
Name=Vim
GenericName=Text Editor
Comment=Edit text files
Comment[es]=Edita archivos de texto
TryExec=vim
Exec=alacritty -e vim %F
Terminal=true
Type=Application
Keywords=Text;editor;
Icon=gvim
Categories=Utility;TextEditor;
StartupNotify=false
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;

Был аргумент Terminal=true. Он выполняет Exec=команду в терминале, открывая для этого терминал. Если вы установите Terminal=falseэто, это предотвратит открытие любого терминала, и он просто выполнит команду, не открывая терминал.

OliverLew Jun 29 2020 at 16:31

Изменить: иногда это не работает, я не знаю, что контролирует, какой эмулятор терминала используется при открытии vim.

Я только что нашел другой способ решения этой проблемы: создайте символическую ссылку, указанную xtermв $PATHвашем собственном эмуляторе терминала. Однако я не могу гарантировать, что это сработает для всех.

Преимущество этого решения заключается в том, что вам не нужно изменять какие-либо файлы записей рабочего стола. Все .desktop Terminal=trueбудут использовать новый эмулятор терминала.


При попытке выполнить запись на рабочем столе с помощью exo-open(аналогично xdg-open, из xfce) появляется предупреждающее сообщение

sh: line 0: exec: xterm: not found

Так что, я думаю, xtermв программе жестко запрограммировано открытие файлов .desktop. Затем я попытался сделать эту символическую ссылку

ln -s /usr/bin/st ~/.local/bin/xterm

и работает отлично.

Однако фактическая порожденная команда, вероятно, основана на xtermаргументах, поэтому работают только эмуляторы терминала, которые используют тот же аргумент для указания команды запуска. Один встречный пример: termiteон требует, чтобы в -eопции была заключена вся команда .