- Вопрос или проблема
- Ответ или решение
- Как запустить .desktop файлы из терминала и dmenu
- 1. Подготовка файла .desktop
- 2. Сделать файл .desktop исполняемым
- 3. Добавление шебанга
- 4. Использование gtk-launch (опционально)
- 5. Запуск приложения из экранированного выполнения
- 6. Создание кастомного скрипта
- Заключение
Вопрос или проблема
Я хочу запускать файлы .desktop
из терминала и dmenu. Из терминала их желательно запускать с помощью ./app.desktop
или /path/to/app.desktop
, а app.desktop
должен находиться в директории $PATH
. Я предпочел бы не использовать внешнюю команду, такую как gtk-launch app.desktop
.
Кроме того, я обнаружил, что gtk-launch
не всегда работает для запуска приложения с gtk-launch app.desktop
, и даже когда он работает, добавление #!/path/to/gtk-launch
в верхнюю часть .desktop
вызывает ошибку gtk-launch: no such application ./app.desktop
, когда я запускаю ./app.desktop
с установленными правами на выполнение.
Я использую bspwm и в основном предпочитаю запускать вещи из терминала или с помощью dmenu_run
, поэтому у меня нет рабочего стола, на котором я мог бы нажимать на файлы .desktop
для их запуска.
Как я могу сделать файлы .desktop
исполняемыми?
Как указывает этот ответ на Ask Ubuntu SE и комментарий к вопросу на GitLab:
#!/usr/bin/env sh gio launch '/path/file.desktop'
При условии, что они являются исполняемыми (chmod u+x /path/to/app.desktop
), вы можете добавить этот шебанг в верхнюю часть:
#!/usr/bin/env xdg-open
И с этого момента вы можете вызывать ваше приложение с помощью:
/path/to/app.desktop
Например, этот файл .desktop запустит xeyes
.
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Xeyes
Exec=xeyes
Terminal=false
Type=Application
Если у вас установлен gtk-launch
, вы можете выполнить:
gtk-launch example.desktop
gtk-launch
будет искать example.desktop
в /usr/share/applications/
, ~/.local/share/applications/
и везде, где обычно размещаются файлы .desktop
.
Вы можете попробовать разобрать файл и выполнить то, что указано в строке Exec=
. Это должно сработать:
$(awk '/^Exec=/{sub(/^Exec=/, ""); print}' file.desktop)
Все, что было в file.desktop
, запустится.
Вы также можете расширить это и создать скрипт, который принимает аргумент APP и выполняет эту команду на файлах file.desktop
, в которых есть “Name=APP”.
Ответ или решение
Как запустить .desktop
файлы из терминала и dmenu
Запуск .desktop
файлов из терминала или приложения dmenu может показаться неочевидной задачей, особенно если вы используете такие оконные менеджеры, как bspwm, без полноценного рабочего стола. Однако, существует несколько методов, которые позволяют вам достичь этой цели, следуя определенным шагам.
1. Подготовка файла .desktop
Файлы .desktop
представляют собой текстовые файлы, которые описывают, как запускать приложения. Убедитесь, что ваш файл имеет следующую структуру:
[Desktop Entry]
Version=1.0
Type=Application
Name=Пример приложения
Exec=/path/to/application
Terminal=false
2. Сделать файл .desktop
исполняемым
Чтобы вы могли запускать .desktop
файлы из терминала, необходимо сделать их исполняемыми. Это можно сделать с помощью следующей команды:
chmod u+x /path/to/app.desktop
3. Добавление шебанга
В начале вашего .desktop
файла добавьте шебанг, который позволяет запускать команды напрямую. Используйте одну из следующих строк:
#!/usr/bin/env xdg-open
или
#!/usr/bin/env sh
gio launch '/path/to/app.desktop'
Это позволит вам запускать приложение, выполнив:
/path/to/app.desktop
4. Использование gtk-launch (опционально)
Если у вас установлен gtk-launch
, можно запускать .desktop
файлы следующим образом:
gtk-launch example.desktop
gtk-launch
ищет файлы в стандартных директориях, таких как /usr/share/applications/
и ~/.local/share/applications/
. Однако, если вы хотите запускать .desktop
файлы, находящиеся в других директориях, это не всегда будет работать.
5. Запуск приложения из экранированного выполнения
Если вы хотите обойтись без gtk-launch
, можно воспользоваться следующей командой:
$(awk '/^Exec=/{sub(/^Exec=/, ""); print}' /path/to/app.desktop)
Этот способ обеспечивает запуск команды, указанной в строке Exec=
вашего файла .desktop
.
6. Создание кастомного скрипта
Для упрощения процесса можно создать маленький скрипт, который будет принимать имя приложения и запускать его, находя соответствующий .desktop
файл. Пример:
#!/bin/bash
APP_NAME=$1
FILE=$(grep -rl "Name=$APP_NAME" ~/.local/share/applications/*.desktop)
if [ -f "$FILE" ]; then
EXEC_COMMAND=$(awk -F= '/^Exec=/{print $2}' "$FILE")
$EXEC_COMMAND &
else
echo "Приложение не найдено."
fi
Этот скрипт можно запускать с аргументом – именем приложения.
Заключение
Запуск .desktop
файлов из терминала и dmenu является эффективным способом управления приложениями без необходимости взаимодействия с графическим интерфейсом. Следуя вышеизложенным методам, вы сможете настраивать систему под свои потребности и комфортно использовать её в среде, где отсутствует полноценный рабочий стол.