Вопрос или проблема
Приложения в формате snap на Ubuntu при запуске в виртуальных рабочих столах nomachine или x2go выдают ошибку и не запускаются. Это касается только ограниченных snap, что составляет большую их часть.
Виртуальные рабочие столы nomachine связаны с сервером рабочей станции nomachine или другими продуктами в стиле терминального сервера, а не с базовым клиентом совместного использования рабочего стола nomachine. Я не использую x2go, но пользователи сообщают об идентичных проблемах, поэтому я предполагаю, что он тоже делит виртуальный рабочий стол.
Известные обходные пути — это либо изменить песочницу snap, отключив cgroups v2, либо вручную имитировать нормальное значение DBUS_SESSION_BUS_ADDRESS. Первый способ прост, но радикален, поскольку cgroups v2 является важной частью современного опыта Linux, а второе решение — это хак, который может не сработать при множественном числе пользователях.
Я не знаю, почему DBUS_SESSION_BUS_ADDRESS оказывается неправильным, когда nomachine или x2go запускает сеанс. При использовании этих приложений для удаленного доступа к сеансам виртуального рабочего стола нет входа, управляемого традиционным дисплейным менеджером. Nomachine выполняет вход самостоятельно, а затем запускает графическую сессию. Я предполагаю, что x2go делает то же самое. Существует какая-то разница в путях коду, которая приводит к неожиданному значению для DBUS_SESSION_BUS_ADDRESS. Я предполагаю, что какая-то часть логики запуска сессии systemd не вызывается nomachine или x2go. Но мне было сложно это понять. Я понимаю, что у меня нет четкого представления о том, как работает вход в Linux, и я не могу найти документацию, которую я мог бы понять.
(Я думаю, что сеанс “дистанционного доступа” к физически присутствующему сеансу, например, к десктопу nomachine, не имеет этой проблемы, поскольку он не обходит дисплейный менеджер)
Мой опыт связан с nomachine, но пользователи x2go сообщают о той же проблеме, и тот же обходной путь работает и там.
С виртуальным рабочим столом nomachine в xubuntu или ubuntu я не могу запустить ограниченные snap, такие как firefox (если только cgroups v2 не отключен через параметр ядра).
Ошибка при запуске из терминала выглядит следующим образом:
tim@ubuntu ~/Desktop $ firefox
/user.slice/user-1000.slice/session-c3.scope не является cgroup snap
но одной из коренных причин проблемы, похоже, является то, что
DBUS_SESSION_BUS_ADDRESS настроен неправильно. У него есть значение, но оно сильно отличается от нормального значения сеанса с дисплейным менеджером.
В типичном входе в Ubuntu мы видим что-то подобное:
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
но в сломанном сеансе nomachine мы видим что-то вроде:
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-ELpK0GVRdC,guid=877c270e0667562ac373497b63ebf31c
Если я вручную установлю DBUS_SESSION_BUS_ADDRESS, ограниченные snap будут работать.
Например, если в nomachine я запускаю xfce таким образом:
DefaultDesktopCommand "env
DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus /usr/bin/startxfce4"
snap будут работать.
Проблема проявляется только для ограниченных snap, когда работает cgroups v2. Поэтому ограниченные snap, а значит и песочница, тоже должны быть факторов. По этой причине многие убеждены, что это ошибка snap, но разработчики snap не согласны с этим.
Смотря на странное значение для DBUS_SESSION_BUS_ADDRESS, я делаю вывод, что сессия не настраивается должным образом. То, как nomachine запускает сессию, должно отличаться от того, как работают дисплейные менеджеры. DBUS_SESSION_BUS_ADDRESS устанавливается в процессе входа systemd, до того, как начнется графическая сессия.
Другой возможностью является то, что
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-ELpK0GVRdC,guid=877c270e0667562ac373497b63ebf31c
является совершенно допустимым значением, но что песочница snap не принимает его (у неограниченных snap-приложений проблем нет).
Наименее хлопотный обходной путь — отключить cgroups v2, и именно это рекомендует nomachine.
Почему DBUS_SESSION_BUS отличается, когда nomachine или x2go выполняют вход?
Ответ или решение
Проблема, которую вы описали, действительно является распространенной среди пользователей, использующих виртуальные рабочие столы с NoMachine и x2go на Ubuntu 22.04, особенно с консолями, ограниченными с точки зрения безопасности, такими как snap.
Давайте рассмотрим причины и возможные решения этой проблемы более подробно.
Причины проблемы
Когда вы используете NoMachine или x2go для подключения к виртуальному рабочему столу, процессы этих программ могут не корректно настраивать переменные среды, такие как DBUS_SESSION_BUS_ADDRESS
. Эта переменная отвечает за связь с системой D-Bus, которая используется многими графическими приложениями, включая те, что упакованы в snap-формате.
При стандартном входе в систему через дисплейный менеджер (например, GDM или LightDM), DBUS_SESSION_BUS_ADDRESS
устанавливается правильно и указывает на сокет D-Bus, доступный для текущей сессии. Ваша проблема возникает, когда D-Bus устанавливается с помощью нестандартного пути, как в вашем случае:
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-ELpK0GVRdC,guid=877c270e0667562ac373497b63ebf31c
Это означает, что snap-приложения не могут правильно взаимодействовать со средой D-Bus, что приводит к ошибке:
/user.slice/user-1000.slice/session-c3.scope is not a snap cgroup
Возможные решения
-
Настройка переменной среды вручную:
Как вы уже упомянули, вы можете вручную установитьDBUS_SESSION_BUS_ADDRESS
, чтобы исправить проблему. Вот как это можно сделать:Настройте
DefaultDesktopCommand
в конфигурации NoMachine следующим образом:DefaultDesktopCommand "env DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus /usr/bin/startxfce4"
Это обеспечит правильное значение переменной для стартуемой сессии, и ваша snap-программа (например, Firefox) должна начать работать.
-
Отключение cgroups v2:
Хотя это не идеальное решение, поскольку cgroups v2 — это важная часть современного управления процессами в Linux, вы можете временно отключить его, чтобы проверить, устранится ли проблема. Это можно сделать, добавив параметр к ядру в файл конфигурации grub:GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0"
Следует помнить, что это решение механически воздействует на всю систему и может повлиять на другие аспекты работы.
-
Использование различных дисплейных менеджеров:
Возможно, стоит рассмотреть использование альтернативных дисплейных менеджеров или протоколов удаленного доступа, которые могут лучше справляться с настройкой окружения. Например, использование VNC или других решений, которые не зависят от D-Bus для управления сессиями, может помочь.
Заключение
Недостаточная настройка переменной DBUS_SESSION_BUS_ADDRESS
— это основной источник вашей проблемы с запуском snap-приложений на NoMachine и x2go. Мы рекомендовали вам корректировать эту переменную вручную или временно отключить cgroups v2. Лучше всего, однако, подождать обновлений от разработчиков snap или NoMachine, которые могут улучшить совместимость в будущем.
Если у вас будут дополнительные вопросы или потребуется более детальное разъяснение, пожалуйста, дайте знать!