Создание и отладка .desktop файла для запуска GoG Galaxy в Arch Linux с GNOME Shell
В данной статье рассмотрим пример создания и настройки файла .desktop
для запуска клиента GoG Galaxy в среде Arch Linux с GNOME Shell версии 1:48.3-1. Также разберём распространённые ошибки и способы их устранения, а также методы проверки работоспособности такого файла.
Что такое .desktop файл и зачем он нужен?
.desktop
файлы — это стандартные файлы в Linux, которые позволяют системам отображать ярлыки приложений в меню, панели запуска и других элементах пользовательского интерфейса. Они описывают, как запускать программу, с каким именем и иконкой.
В нашем случае мы захотели создать ярлык для запуска GoG Galaxy через WINE и umu-launcher:
bash
$ cat /usr/share/applications/gog.desktop
[Desktop Entry]
Type=Application
Name=GoG Galaxy
Exec="WINEPREFIX=’/mnt/ssd0/gog-galaxy’ umu-run ‘/mnt/ssd0/gog-galaxy/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe’"
Icon=/home/Zsar/.local/share/icons/hicolor/64×64/apps/BB33_GalaxyClient.0.png
Terminal=false
StartupNotify=false
Categories=Game;
SingleMainWindow=true
Проблемы при запуске и отображении ярлыка GoG Galaxy
При первоначальном тестировании .desktop
файла всё работало корректно: ярлык появлялся в меню, выбирался по ключевым словам gog
, GoG
, galaxy
, Galaxy
и корректно запускал программу.
Однако после перезагрузки системы GNOME Display Manager (gdm) перестал видеть этот ярлык — он просто исчез из списка. При этом:
- Права доступа к файлу были одинаковыми с другими корректно работающими ярлыками (например,
steam.desktop
). - Логи
gdm
пусты и не содержат упоминаний о файле. - Значок менялся несколько раз и изменения моментально отображались, что исключает кэширование гномом старой версии файла.
Разбор причин неполадок и их исправление
1. Ошибка в поле Exec= — неправильный синтаксис
Поле Exec=
в .desktop
файле должно содержать команду, которую можно запустить напрямую. В приведённом примере команда начинается с присваивания переменной окружения WINEPREFIX
, что разрешается шеллом, но не поддерживается напрямую GNOME, т.к. он не выполняет это через оболочку.
Интерпретатор, который запускает программу из ярлыка, не умеет парсить конструкции вида:
bash
WINEPREFIX=’/mnt/ssd0/gog-galaxy’ umu-run ‘/mnt/ssd0/gog-galaxy/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe’
Потому система не видит исполняемую команду.
2. Лишние двойные кавычки вокруг всей команды в Exec=
В конфигурации использована строка в двойных кавычках:
bash
Exec="WINEPREFIX=’/mnt/ssd0/gog-galaxy’ umu-run ‘/mnt/ssd0/gog-galaxy/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe’"
Это является ошибкой. Спецификация .desktop
файлов не требует (и не поддерживает) заключение всей строки Exec
в кавычки. В итоге GNOME воспринимает это как единственный аргумент — команду с кавычками, которую не может выполнить.
Как правильно прописать команду Exec=
Чтобы переменные окружения корректно применились, есть несколько вариантов:
- Через запись команды в скрипт
Создайте shell-скрипт, который устанавливаетWINEPREFIX
, а затем запускает программу, и укажите путь к этому скрипту в полеExec=
:
bash
!/bin/bash
export WINEPREFIX=’/mnt/ssd0/gog-galaxy’
exec umu-run ‘/mnt/ssd0/gog-galaxy/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe’
Этот скрипт разместите, например, в /usr/local/bin/gog-launcher.sh
и сделайте его исполняемым:
bash
chmod +x /usr/local/bin/gog-launcher.sh
В .desktop
файле:
ini
Exec=/usr/local/bin/gog-launcher.sh
- Запуск через оболочку explicitly
В поле Exec=
можно вызвать шелл с опцией -c
, чтобы правильно обработать сложную команду:
ini
Exec=sh -c ‘WINEPREFIX="/mnt/ssd0/gog-galaxy" umu-run "/mnt/ssd0/gog-galaxy/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe"’
При этом не используйте двойные кавычки вокруг всей строки Exec=
, а обрамляйте внутренние аргументы в одинарные.
Где искать логи и как проверять ошибки?
-
Логи gdm:
Папка/var/log/gdm/
часто пустая, так как gdm не хранит подробных логов о приложениях и ярлыках. - Журнал systemd и GNOME Shell:
Используйтеjournalctl
для просмотра логов:
bash
journalctl /usr/bin/gnome-shell
journalctl —user
Здесь можно найти сообщения о неправильном разборе .desktop
файлов или ошибках запуска.
- Утилиты для проверки .desktop файлов:
-
dex
– внешняя утилита, которая пытается запустить.desktop
файл и может указывать на ошибки. gio launch
– встроенная в GNOME команда, которая пытается открыть файл согласно правилам GNOME:
bash
gio launch /usr/share/applications/gog.desktop
Она помогает проверить, понимает ли GNOME данный ярлык.
Итоги и рекомендации
- Не заключайте всю строку
Exec=
в кавычки. - Для сложных команд с переменными окружения лучше использовать оболочечные скрипты или запуск через
sh -c '...'
. - Проверяйте права доступа к файлам, но чаще всего проблема именно в синтаксисе.
- Для отладки используйте
journalctl
и утилитыdex
,gio launch
. - Перезагрузка системы помогает проверить, не закешировалась ли старая версия файла.
Правильная настройка .desktop
файла — ключ к удобному запуску Windows-приложений через WINE в Linux, особенно в GNOME Shell.
Полезные ссылки
- Desktop Entry Specification (FreeDesktop.org)
- Ручное создание и отладка
.desktop
файлов в Arch Wiki - Документация по
journalctl
и системным логам
Следуя этим рекомендациям, вы сможете создать корректный ярлык для GoG Galaxy, который будет всегда доступен в вашем меню приложений Arch Linux с GNOME Shell.