LINUX.ORG.RU

Как правильно организовать запуск таких серверов, как mpd и transmission-daemon

 , , , ,


1

4

Добрый вечер. Я пользуюсь mpd и transmission-daemon на единственном домашнем компьютере, и usecase такой:

Единственный пользователь, к обоим серверам подключаюсь локально же, а клиент-серверная архитектура нужна, чтобы я мог рулить одними и теми же программами и через GUI, и по ssh с телефона (в случае музыки это актуально, когда я не за компом, а лежу, а в случае торрентов - вообще безразлично, где я, есть проброс портов). Также мне просто эстетически нравится такой подход.

Хочу реализовать запуск примерно таким образом: эти сервера должны автоматически запускаться при первом логине пользователя от имени пользователя до завершения последней сессии пользователя, безотносительно того, X или не X. Пожалуйста, подскажите, как лучше такое реализовать? cast intelfx, мне кажется, или с помощью systemd можно такое сделать? Заранее спасибо.

★★

эти сервера должны автоматически запускаться при первом логине пользователя от имени пользователя до завершения последней сессии пользователя,

systemd --user так и запускает демоны, емнип

derlafff ★★★★★ ()

А в чём, собственно, проблема?

Вариантов глобально два:

  • запускать через общесистемный инстанс systemd (PID 1, /etc/systemd/system, systemctl) с помощью юнита вида
    [Service]
    User=...
    Group=...
    ExecStart=...
    
    [Install]
    WantedBy=multi-user.target
    
  • запускать через per-user systemd ($HOME/.config/systemd/user, systemctl --user) с помощью юнита вида
    [Service]
    ExecStart=...
    
    [Install]
    WantedBy=default.target
    

Дальше начинаются тонкости. Во-первых, по умолчанию пользовательский инстанс systemd запускается с первым логином пользователя и завершается с последним разлогином (соответственно, запускаются и прибиваются все запущенные из-под него демоны). Чтобы он запускался при старте системы и жил до шатдауна, нужно сделать loginctl enable-linger <имя-пользователя>.

Во-вторых, если ты используешь PulseAudio, нужно сделать ещё некоторые вещи и учесть, что:

  • По умолчанию PulseAudio запускается для каждого пользователя свой;
  • Во всех дистрибутивах, кроме арча, он запускается вместе с иксами через xinitrc, а в арче — через пользовательский инстанс systemd;
  • Если для какого-то пользователя нет ни одной активной сессии (== текущего логина), PulseAudio не будет ничего воспроизводить, если только пользователь не добавлен в группу audio.

Следствие из первого пункта: вероятно, имеет смысл вручную перенастроить систему на запуск единой копии PulseAudio (systemwide mode).

Следствие из второго пункта: mpd нужно запускать строго после пульсы, т. е. в арче для запуска mpd нужно использовать systemd --user, а не в арче — только PulseAudio systemwide mode. Иначе пульса запустится автоматически с mpd (autospawn), но процесс пульсы окажется в той же цгруппе, что и mpd, и когда ты захочешь (например) перезапустить mpd — у тебя внезапно отвалится звук.

Следствие из третьего пункта: тебе нужно добавить юзера в группу audio или использовать PulseAudio systemwide mode.

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

Во всех дистрибутивах, кроме арча, он запускается вместе с иксами через xinitrc, а в арче — через пользовательский инстанс systemd;

Не знаю как там у вас в школолоарче, но в федоре xinitrc выпилили давним давно.

По умолчанию PulseAudio запускается для каждого пользователя свой;

Не совсем верно.

тебе нужно добавить юзера в группу audio

Не нужно, так как это никак не повлияет на pulseaudio, проверено.

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

Не знаю как там у вас в школолоарче, но в федоре xinitrc выпилили давним давно.

Ой ли?

ls -l /etc/X11/xinit/xinitrc.d
Говорим, разумеется, про последний релиз, т. е. 22.

Не совсем верно.

А как, по-твоему?

Не нужно, так как это никак не повлияет на pulseaudio, проверено.

grep -R '"audio"' /usr/lib/udev/rules.d
intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 2)