Самописный .desktop файл работал до перезагрузки, теперь не распознаётся – как исправить

Создание и отладка .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=

Чтобы переменные окружения корректно применились, есть несколько вариантов:

  1. Через запись команды в скрипт
    Создайте 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

  1. Запуск через оболочку 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 файлов:
  1. dex – внешняя утилита, которая пытается запустить .desktop файл и может указывать на ошибки.

  2. 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.


Полезные ссылки


Следуя этим рекомендациям, вы сможете создать корректный ярлык для GoG Galaxy, который будет всегда доступен в вашем меню приложений Arch Linux с GNOME Shell.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *