Мое требование немного отличается от вот этот в этом случае я хотел бы запустить оконный менеджер для каждого из двух пользователей без полномочий root при загрузке.
Для тестирования сначала я готовлю следующие строки в .xinitrc и / или .xsession в домашних каталогах user2 и user3 вот так:
#!/bin/sh
exec icewm
Затем я вручную вхожу в виртуальную консоль как user2 или user3 или откройте окно xterm и введите эту команду:
xinit -- /usr/bin/Xvfb :3 -cc 4 -screen 0 1024x768x16
Это делает свою работу - icewm и Xvfb работают негласно.
Теперь хочу автоматизировать логин и команду xinit при загрузке. Однако ни один из следующих подходов не работает:
Либо вручную введите эти две команды как root, либо поместите их в /etc/rc.local:
su -l user2 -c xinit -- /usr/bin/Xvfb :3 -cc 4 -screen 0 1024x768x16
No protocol specified
IceWM: Can't open display: :0. X must be running and $DISPLAY set.
start-stop-daemon --start -u user2 -g user2 -b --pidfile /tmp/pid --exec /usr/bin/xinit -- -- Xvfb :3
ps ax
[Xorg] <defunct>
Будем признательны за помощь!
[Отредактировать после тестирования подхода alex.d.]
файл /home/user2/.xsession:
#!/bin/bash
export DISPLAY=localhost:3
export XAUTHORITY=$HOME/.Xauthority
exec icewm
Выполните эту команду как root:
su -l user2 -c /usr/bin/startx -- /usr/bin/Xvfb :3 &
Я получаю это:
hostname: Name or service not known
xauth: (stdin):1: bad display name "example.com:2" in "add" command
IceWM: Can't open display: localhost:3. X must be running and $DISPLAY set.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
xauth: (argv):1: bad display name "example.com:2" in "remove" command
Любая идея? Пожалуйста!
Это мой рабочий подход.
файл /etc/systemd/system/john.service:
[Unit]
Description=xinit - user "john"
[Service]
User=john
Group=john
ExecStart=/usr/bin/xinit openbox-session -- /usr/bin/Xvfb :1 -nolisten tcp
ExecStopPost=/usr/bin/killall -u john
[Install]
WantedBy=multi-user.target
файл /home/john/.config/openbox/autostart:
wine my_program.exe
Спасибо всем за помощь!
При запуске X11 из rc.local он не запускается изнутри пользовательского сеанса (consolekit или logind), поэтому в среде что-то отсутствует. Вместо простого xinit вы должны попытаться запустить X11 с startx, который предназначен для запуска сеанса.