Мое требование немного отличается от этого тем, что я хотел бы запустить оконный менеджер для каждого из двух пользователей без полномочий 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:
[Изменить после тестирования подхода 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, который предназначен для запуска сеанса.