Пытаюсь запустить любую команду в systemd-nspawn
через systemd-run
(что вроде как рекомендуемый вариант), но получаю ошибки вместо запуска (в качестве примера даже env
не работает).
$ sudo systemd-run --machine user@container /usr/bin/env
Failed to start transient service unit: Access denied
$ systemd-run --machine user@container /usr/bin/env
Failed to connect to bus: Permission denied
Failed to start transient service unit: Transport endpoint is not connected
В самом контейнере следующее:
Sep 07 12:45:23 container systemd[1]: Started systemd-stdio-bridge.
Sep 07 12:45:23 container dbus-daemon[37]: [system] Activating via systemd: service name='org.freedesktop.home1' unit='dbus-org.freedesktop.home1.service' requested by ':1.46475' (uid=0 pid=371724 comm="(o-bridge)")
Sep 07 12:45:23 container dbus-daemon[37]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.home1.service': Unit dbus-org.freedesktop.home1.service not found.
Sep 07 12:45:23 container (o-bridge)[371724]: pam_unix(login:session): session opened for user user(uid=1000) by user(uid=0)
Sep 07 12:45:23 container systemd-logind[40]: New session 50 of user user.
Sep 07 12:45:23 container systemd[1]: Started Session 50 of User user.
Sep 07 12:45:23 container (sd-pam)[371726]: pam_unix(login:session): session closed for user user
Sep 07 12:45:23 container systemd[1]: run-u46474.service: Deactivated successfully.
Sep 07 12:45:23 container dbus-daemon[37]: [system] Rejected send message, 2 matched rules; type="method_call", sender=":1.46478" (uid=1000 pid=371726 comm="(sd-pam)") interface="org.freedesktop.login1.Manager" member="ReleaseSession" error name="(unset)" requested_reply="0" destination="org.freedesktop.login1" (uid=0 pid=40 comm="/usr/lib/systemd/systemd-logind")
Sep 07 12:45:23 container (sd-pam)[371726]: pam_systemd(login:session): Failed to release session: Access denied
Sep 07 12:45:23 container (sd-pam)[371726]: PAM Attempted to close sd-bus after fork, this should not happen.
Sep 07 12:45:23 container systemd[1]: session-50.scope: Deactivated successfully.
Sep 07 12:45:23 container systemd-logind[40]: Session 50 logged out. Waiting for processes to exit.
Sep 07 12:45:23 container systemd-logind[40]: Removed session 50.
На текущий момент приходится запускать следующим образом:
sudo systemd-run --machine "$id" --remain-after-exit \
/usr/bin/sudo --user "$user" --login \
/usr/bin/sh -c "bemenu-run"
Потому что без sudo
софт запускается от пользователя root
и отсутствуют многие переменные окружения, которые нужны для запуска GUI.
Собственно весь вопрос в том, как в systemd-nspawn
правильно запускать приложения от обычного пользователя, при этом не оставляя зависающих процессов (к примеру запустив Firefox через bemenu-run
, сам процесс bemenu-run
остаётся на месте, чего не происходит про запуске с хоста. Правда я уже не помню как именно запускал, через systemd-run
или через machinectl
).
Т.е. нужно как-то создать сессию обычного пользователя и из неё уже запустить программу. Но возможно я не совсем понимаю, как оно работает на самом деле.