LINUX.ORG.RU

Debian Stable + SwayWM + Systemd

 , ,


0

1

Доброго времени суток, уважаемые! Использую стабильный Debian 12, запускаю swaywm как unit systemd. Периодически получаю перезагрузку swaywm и в логах вижу следующие ошибки:

-- Boot 585a550b3f0e442e9530636e1f212371 --
Oct 25 17:48:40 localhost sway[65485]: wl_display_dispatch: Broken pipe
-- Boot adcd59965aa44ef2b0a1af42f85d0e5e --
Oct 25 20:10:18 localhost sway[1439]: The provided value is outside of the valid range
-- Boot 4166d524c0f145a0aaaf4c60f0cf9f49 --
Oct 26 08:50:28 localhost sway[1433]: The provided value is outside of the valid range

Сам юнит /etc/systemd/system/sway@7.service:

[Unit]
Description=Sway compositor
StartLimitBurst=5
StartLimitIntervalSec=200

[Service]
StandardError=journal
StandardOutput=journal
ExecStartPre=/usr/bin/chvt %I
ExecStart=/usr/bin/sway
TTYPath=/dev/tty%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
PAMName=login
User=nuxster
WorkingDirectory=/home/nuxster
EnvironmentFile=/home/nuxster/.config/sway/env
Restart=on-failure
RestartSec=1
StandardInput=tty
Nice=-5

[Install]
WantedBy=graphical.target

/home/nuxster/.config/sway/env

PATH=/home/nuxster/bin:/usr/bin
TERM=

XDG_CURRENT_DESKTOP=sway
XDG_RUNTIME_DIR=/run/user/1000
XDG_DATA_HOME=/home/nuxster/.local/share
XDG_CONFIG_HOME=/home/nuxster/.config

#FZF_DEFAULT_COMMAND="rg --files"

# Disable client-side Qt decorations
QT_WAYLAND_DISABLE_WINDOWDECORATION=1

# Requires that qt5ct package is installed
#QT_QPA_PLATFORMTHEME=qt5ct

KITTY_ENABLE_WAYLAND=1
MOZ_ENABLE_WAYLAND=1
MOZ_USE_XINPUT2=1

# Required for IntelliJ
_JAVA_AWT_WM_NONREPARENTING=1

QT_QPA_PLATFORM=wayland
GDK_BACKEND=wayland
GTK_USE_PORTAL=0

# For Waybar
LC_TIME=en_US.UTF-8
# For qalc
LC_NUMERIC=en_US.UTF-8

Версии ПО такие:

  • kernel: 6.1.0-13-amd64
  • swaywm: 1.7-6
  • systemd: 252.17-1~deb12u1
★★★

Последнее исправление: CYB3R (всего исправлений: 1)
Ответ на: комментарий от nuxster

Возможно эти ошибки некритичные

Ну как не критичные, on-failure значит что процесс sway завершился с кодом отличным от нуля.
А падает он сам по себе или в момент запуска какого то приложения?

arax ★★
()
Последнее исправление: arax (всего исправлений: 1)
Ответ на: комментарий от alex1101

Я сейчас уже навряд ли найду где конкретно я это вычитал, но это было либо в документации на сайте Arch Linux, либо в документации SwayWM. А чем этот параметр может мешать? Перезагрузки были без запущенного Firefox.

nuxster ★★★
() автор топика

Видимо помогло отключение этих параметров:

Restart=on-failure
RestartSec=1

По крайней мере перезагрузки пропали :-) С ошибками в логах буду разбираться отдельно. Всем спасибо!

nuxster ★★★
() автор топика
Ответ на: комментарий от nuxster

Тем не менее того же можно добиться и без юнита systemd. Настрой автологин в консоль на первом tty, и автостарт sway сразу после логина.

Юниты systemd не предназначены для запуска пользовательских сессий.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Тем не менее оно работает и достаточно удобно настраивается из скрипта для развертывания системы. Чем запуск swaywm через systemd отличается от того же gdm через systemd? Systemd можнет загружать что угодно, не встречал каких-либо ограничений.

nuxster ★★★
() автор топика
Ответ на: комментарий от nuxster

Чем запуск swaywm через systemd отличается от того же gdm через systemd?

Фундаментально разные вещи. Посмотри на структуру процессов, которая образуется при запуске сессии через GDM (или любой другой DM, например greetd, или даже просто через getty. Сюрприз - процессы сессии не являются процессами gdm.service (или greetd.service или getty@tty1.service). А теперь посмотри на свой systemctl status sway@7.service. Обрати внимание на список процессов.

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 2)
Ответ на: комментарий от nuxster

запускать вполне можно, просто все это очень нетривиально взаимодействует с greetd (или чем ты там запускаешь пользовательскую сессию), PAM и твоим конфигом. Если у тебя одно дерево процессов, то с этим еще как-то можно иметь дело, но вот если деревьев несколько, да еще и часть из них под управлением systemd, то число возможных багов растет просто по экспоненте. Даже переменные окружения этому всему передать - уже целая история. Разработчики sway не хотят с этим разбираться, поэтому и пишут «не рекомендуем».

Как минимум - то, что ты запускаешь в конфиге sway через swaymsg exec, очень легко может остаться висеть в памяти после завершения юнита. Или например ожидать каких-то специальных сигналов для завершения работы, например SIGINT вместо SIGTERM. Твое wl_display_dispatch как раз похоже на такую ошибку. Надо посмотреть, кто его вызывает.

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 1)
Ответ на: комментарий от Lrrr

Вот тут уже более развернутый ответ! Если у вас есть такое глубокое понимание процесса, давайте сформируем набор подходов и решений как правильно конфигурировать свое рабочее окружение, как обеспечить корректный и безопасный способ запуска рабочей среды, как обеспечить корректное взаимодействие между системными и пользовательскими процессами. Я, наверное, тут не один такой «чайник», которому будет интересно и полезно в этом глубже разобраться. Многие пользуются sway или i3 и не хотят, например, использовать gdm.

nuxster ★★★
() автор топика
Ответ на: комментарий от nuxster

я сам сейчас переехал на систему с openrc вместо systemd, так что не очень-то хочу разбираться в последнем.

Но как минимум - если хочется запускать с помощью systemd что-то с графическим интерфейсом кроме sway (к такому софту относится даже gpg-agent например, потому что показывает pinentry), то ему нужно пробросить переменную WAYLAND_DISPLAY. То есть где-то в конфиге sway надо прописать что-то типа

exec systemctl --user import-environment WAYLAND_DISPLAY

В арчевом пакете это настроено из коробки, как в дебиане - не знаю.

Все остальные переменные лучше задавать с помощью systemd-environment.d сразу для всех юнитов.

Или еще прикол: я пользуюсь lavalauncher, который не реагирует на SIGTERM. Если попытаться убить его этим сигналом вместо SIGQUIT (а так все пытаются делать по умолчанию, systemd в том числе), то он останется висеть в памяти и при завершении sway начнет сыпать ошибками в консоль.

А вообще лучше всех в этих вопросах должен разбираться @Sunderland93, который пилит Ubuntu Sway Remix

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Да, переменная WAYLAND_DISPLAY есть. Все необходимые переменные находятся в ~/.config/sway/env и доступны всем пользовательским юнитам. Можно все переделать на systemd-environment.d, займусь этим.

nuxster ★★★
() автор топика
Последнее исправление: nuxster (всего исправлений: 1)
Ответ на: комментарий от nuxster

Sway не рекомендуется запускать через systemd изза вероятности появления огромного количества ошибок, в которых разработчики не будут разбираться (впрочем, логин менеджеры тоже не поддерживаются). А для запуска пользовательских сервисов есть вот это https://github.com/alebastr/sway-systemd

Sunderland93 ★★★★★
()