Как запустить .desktop файлы из терминала (или dmenu)

Вопрос или проблема

Я хочу запускать файлы .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 является эффективным способом управления приложениями без необходимости взаимодействия с графическим интерфейсом. Следуя вышеизложенным методам, вы сможете настраивать систему под свои потребности и комфортно использовать её в среде, где отсутствует полноценный рабочий стол.

Оцените материал
Добавить комментарий

Капча загружается...