Раньше как было, даже если ты юзаешь десктопный линукс, ты мог в консоли запустить screen/tmux, что-то запустить долгое там, детачнуть, процесс продолжил бы работать в фоне, в любой момент можно подключиться к сессии screen/tmux, хоть удалённо и там всё продолжает работать. Более простой вариант был запустить процесс через nohup, чтобы он не привязывался к текущему терминалу и продолжил работать в фоне.
Но пришёл Поттеринг со своими Systemd, Logind и прочим и всё переломал. Раньше как было, когда ты завершаешь десктопную сессию, завершали работу только дочерние процессы. Теперь же при логауте из десктопной сессии убиваются все процессы пользователя, назависимо от того как и в какой сессии они были запущены, то есть в том числе и убиваются процессы screen/tmux и запущенное через nohup.
В последних версиях десктопных окружений это поведение включено по умолчанию, по крайней мере в крупных дистрах, через опцию KillUserProcesses=1
где-то в /usr/lib/systemd/logind.conf.d/
(почему там, а не в /etc
, блин?).
Ок, казалось бы ладно, опция есть, можно отключить, прописав 0
. Какое-то время оно так работало без проблем, но позже в dbus что-то поменяли и это перестало корректно работать: https://gitlab.freedesktop.org/dbus/dbus/-/issues/147 Причём эта же проблема и в KDE. Проблема в том что после завершения сессии какие-то процессы продолжали работать почему-то. По дефолту, с включённой опцией KillUserProcesses
они бы прибивались принудительно. Из-за того что не все процессы убиваются, повторно залогиниться в десктопную сессию уже не получится, нужно залогиниться через консоль tty (ctrl+alt+f1) и убить процессы вручную (или выполнить loginctl terminate-session xx
), затем выйти оттуда и зайти в десктоп. Почему десктоп при завершении сессии не может выполнить terminate-session
сам, загадка.
Ок, что предлагает Поттеринг взамен? Взамен он придумал костыль systemd-run
, через который по его мнению следует теперь запускать screen/tmux и то что запускалось раньше через nohup
. Таким образом, screen, tmux или byobu следует запускать так: systemd-run --user --scope tmux
. Но и это ещё не всё! После логаута, если больше никакой сессии пользователя нет, то этот процесс всё равно скорей всего будет убит. Чтобы этого не происходило, нужно включить lingering! (см. man systemd-run
).
Но и это ещё не всё! В какой-то версии systemd работа systemd-run была сломана и например в Ubuntu 18.04 LTS это до сих пор в сломанном состоянии.
Не, я ещё как-то могу понять случайное существование всякой дичи в мире, но каким образом это пролезло во все дистрибутивы?
А что говорит сам Поттеринг?
So, I am not sure what the right fix is here. (#)