
После некоторых поисков мне удалось выяснить, что для получения имени предпочитаемого пользователем эмулятора терминала, установленного в разделе «Приложения по умолчанию» настроек KDE5, можно выполнить следующую команду:
kreadconfig5 --file kdeglobals --group General --key TerminalApplication
В моем случае (запуск Manjaro с KDE Plasma 5) это возвращает строку 'alacritty'. Таким образом, обернув это $(...)
и введя полученную команду в терминале, вы запустите предпочитаемый пользователем эмулятор терминала (я проверил, что это работает).
Однако, когда я создаю пользовательское сочетание клавиш для KDE, чтобы запустить эту команду с помощью Meta+Return
, ничего не происходит. Я также пробовал ставить exec
перед ним на случай необходимости, но это ничего не изменило. Если я просто настраиваю сочетание клавиш для запуска команды alacritty
(что и возвращает первая упомянутая мной команда), то это работает, но, конечно, я хочу иметь возможность запускать любой предпочитаемый пользователем терминал, а не какой-то определенный.
Кто-нибудь может мне объяснить, почему это не работает? Я что-то делаю не так?
решение1
Конструкция $(...)
(подстановка команд) является частью языка команд оболочки POSIX и требует оболочки для ее интерпретации. Насколько я могу судить, средства запуска приложений, включенные в окружения рабочего стола, не обязаны иметь возможность интерпретировать язык команд оболочки; чтобы обезопасить себя, я бы предположил, что они могут только exec
использовать файл и передавать ему список аргументов.
Вы должны иметь возможность определить сочетание клавиш, которое вызывает что-то вроде:
sh -c '"$(kreadconfig5 ...)"'
Подстановка команды заключена в двойные кавычки, чтобы гарантировать, что она не потерпит неудачу, если путь к файлу, созданный подставляемой командой, содержит пробельные символы.
Для полноты отметим, что это все равно потерпит неудачу, если имя исполняемого файла заканчивается одним или несколькими символами новой строки (конечно, крайне маловероятно).