Я работаю над проектом для клиента, который хочет получить доступ к некоторым приложениям Windows через мой веб-сайт с помощью noVNC, что дало мне идею настроить сервер с несколькими пользователями.
Я установил TigerVNC-сервер на свой CentOS 7 VPS, который хорошо работает, когда подключен один пользователь, но когда подключается второй пользователь, он / она получит только черный экран, так как кажется, что gnome не запустится для второго пользователь.
Если я, например, запускаю vncservice@:1
все работает нормально, и пользователь войдет в систему без проблем, но когда vncservice@:2
запустится, он не запустит gnome, и он / она получит черный экран только с курсором. Когда vncservice@:2
запускается первым, этот пользователь будет запущен в gnome, но vncservice@:1
не увидит свой рабочий стол и т.д. и т.п.
Вот как выглядит моя установка:
[Пользователь 1 и 2 ~/.vnc/xstartup]
#!/бин/ш
отменить SESSION_MANAGER
сбросить DBUS_SESSION_BUS_ADDRESS
/etc/X11/xinit/xinitrc
# Предположим, что либо Gnome, либо KDE будут запущены по умолчанию при установке
# В этом случае мы хотим автоматически завершать сеанс, когда пользователь выходит из системы. В случае, если вы измените
# /etc/X11/xinit/Xclients или ~/.Xclients самостоятельно для достижения другого результата, то вам следует
# будьте ответственны за изменение приведенного ниже кода, чтобы избежать автоматического уничтожения вашей сессии
спать 60
если [ -e /usr/bin/gnome-session -o -e /usr/bin/startkde ]; тогда
vncserver -убить $DISPLAY
killall -u $ПОЛЬЗОВАТЕЛЬ
фи
[/etc/X11/xinit/xinitrc]
#!/бин/ш
# Обязательный источник xinitrc-common, который является общим кодом, общим для
# Сценарии Xsession и xinitrc, которые были исключены, чтобы избежать дублирования
. /etc/X11/xinit/xinitrc-общий
# У пользователя могут быть собственные клиенты, которых он хочет запустить. Если они этого не сделают,
# вернуться к системным настройкам по умолчанию.
если [ -f $HOME/.Xclients ]; тогда
exec $CK_XINIT_SESSION $SSH_AGENT $HOME/.Xclients || \
exec $CK_XINIT_SESSION $SSH_AGENT $HOME/.Xclients
Элиф [-f /etc/X11/xinit/Xclients]; тогда
exec $CK_XINIT_SESSION $SSH_AGENT /etc/X11/xinit/Xclients || \
exec $CK_XINIT_SESSION $SSH_AGENT /etc/X11/xinit/Xclients
еще
# Отказоустойчивые настройки. Хотя мы никогда не должны попасть сюда
# (мы также предоставляем запасные варианты в Xclients) это не помешает.
[ -x /usr/bin/xsetroot ] && /usr/bin/xsetroot -solid '#222E45'
[ -x /usr/bin/xclock ] && /usr/bin/xclock -геометрия 100x100-5+5 &
[ -x /usr/bin/xterm ] && xterm -геометрия 80x50-50+150 &
[ -x /usr/bin/twm ] && /usr/bin/twm
фи
[vncserver@:1 и vncserver@:2 заменяется фактическим именем пользователя]
[Ед. изм]
Описание=Служба удаленного рабочего стола (VNC)
After=syslog.target network.target
[Оказание услуг]
Тип = разветвление
Пользователь=<ИМЯ ПОЛЬЗОВАТЕЛЯ>
Группа=<ИМЯ ПОЛЬЗОВАТЕЛЯ>
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/usr/bin/vncserver %i
PIDFile=/home/<ИМЯ ПОЛЬЗОВАТЕЛЯ>/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i
[Установить]
WantedBy=многопользовательская.цель
[Журнал VNC второго пользователя]
[root@.... ~]# статус systemctl vncserver@:5
vncserver@:5.service — служба удаленного рабочего стола (VNC)
Загружено: загружено (/etc/systemd/system/vncserver@:5.service; отключено; настройка поставщика: отключена)
Активно: активно (работает) с za 24 июля 2021 г., 19:04:54 CEST; 59 секунд назад
Процесс: 25990 ExecStart=/usr/bin/vncserver %i (code=exited, status=0/SUCCESS)
Процесс: 25981 ExecStartPre=/usr/bin/vncserver -kill %i (code=exited, status=2)
Основной PID: 25997 (Xvnc)
CGroup: /system.slice/system-vncserver.slice/vncserver@:5.service
ââ25997 /usr/bin/Xvnc :5 -auth /home/AHtYezzDXegQScyu/.Xauthority -desktop <HOSTNAME>:5 (AHtYezzDXegQScyu) -fp catalog:/etc/X11/fontpath.d -geometry 1024x768 - pn -rfbauth /home/AHtYezzDXegQScyu/.vnc/passwd -rfbport 5905 -rfbwait 30000
ââ26006 /bin/sh /home/AHtYezzDXegQScyu/.vnc/xstartup
ââ26018 dbus-launch --sh-syntax --exit-with-session
ââ26019 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
ââ26053 /usr/libexec/imsettings-демон
ââ26057 /usr/libexec/gvfsd
ââ26062 /usr/libexec/gvfsd-fuse /home/AHtYezzDXegQScyu/.gvfs -f -o big_writes
ââ26126 /usr/libexec/at-spi-bus-launcher
ââ26131 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
ââ26135 /usr/libexec/at-spi2-registryd --use-gnome-session
ââ26158 /usr/bin/gnome-keyring-daemon --start --components=ssh
ââ26241 /usr/libexec/xdg-permission-store
ââ26246 /usr/libexec/gnome-shell-календарь-сервер
ââ26251 /usr/libexec/эволюция-источник-реестр
ââ26258 /usr/libexec/гоа-демон
ââ26269 /usr/libexec/goa-identity-service
ââ26275 /usr/libexec/mission-control-5
ââ26286 /usr/libexec/gvfs-udisks2-volume-монитор
ââ26293 /usr/libexec/gvfs-mtp-volume-monitor
ââ26299 /usr/libexec/gvfs-goa-volume-monitor
ââ26305 /usr/libexec/gvfs-gphoto2-volume-monitor
ââ26310 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
ââ26311 /usr/libexec/gvfs-afc-volume-monitor
ââ26411 /usr/libexec/gsd-print-notifications
ââ26413 /usr/libexec/gsd-rfkill
ââ26418 /usr/libexec/gsd-screensaver-proxy
ââ26454 спать 60
ââ26458 /usr/libexec/эволюция-календарь-фабрика
24 июля 19:05:22 <HOSTNAME> gnome-session-binary [26007]: ПРЕДУПРЕЖДЕНИЕ: не удалось запустить приложение: невозможно запустить приложение: не удалось разветвить (ресурс временно недоступен)
24 июля 19:05:22 <HOSTNAME> gsd-print-notif[26411]: не удалось выполнить обработчик system-config-printer-udev: не удалось разветвить (ресурс временно недоступен)
24 июля 19:05:22 <HOSTNAME> gnome-session-binary [26007]: ПРЕДУПРЕЖДЕНИЕ: приложение «org.gnome.SettingsDaemon.Power.desktop» убито сигналом 5
24 июля 19:05:22 <HOSTNAME> gnome-session [26007]: gnome-session-binary [26007]: ПРЕДУПРЕЖДЕНИЕ: приложение «org.gnome.SettingsDaemon.Power.desktop» убито сигналом 5
24 июля 19:05:22 <HOSTNAME> gnome-session-binary [26007]: GLib-WARNING: GError установлен поверх предыдущей GError или неинициализированной памяти.
Это указывает на ошибку в чьем-то коде. Вы должны убедиться, что ошибка имеет значение NULL, прежде чем она будет установлена.
Сообщение об ошибке перезаписи было: Невозможно запустить приложение: не удалось разветвить (ресурс временно недоступен)...
24 июля 19:05:22 <HOSTNAME> gnome-session [26007]: gnome-session-binary [26007]: GLib-WARNING: GError установлен поверх предыдущей GError или неинициализированной памяти.
24 июля 19:05:22 <HOSTNAME> gnome-session[26007]: это указывает на ошибку в чьем-то коде. Вы должны убедиться, что ошибка имеет значение NULL, прежде чем она будет установлена.
24 июля 19:05:22 <HOSTNAME> gnome-session [26007]: сообщение об ошибке перезаписи было: Невозможно запустить приложение: не удалось разветвить (ресурс временно недоступен)
24 июля 19:05:22 <HOSTNAME> evolution-calen [26465]: создание потока «gdbus»: ошибка при создании потока: ресурс временно недоступен
24 июля 19:05:47 <HOSTNAME> gnome-shell-cal [26246]: не удалось загрузить источник «дни рождения»: истекло время ожидания
[/etc/X11/xinit/Xclients]
#!/бин/баш
GSESSION="$(тип -p гном-сеанс)"
STARTKDE="$(введите -p startkde)"
# проверить, есть ли у пользователя предпочтительный рабочий стол
ПРЕДПОЧТИТЕЛЬНЫЙ=
если [ -f /etc/sysconfig/desktop]; тогда
. /etc/sysconfig/рабочий стол
если [ "$DESKTOP" = "GNOME" ]; тогда
ПРЕДПОЧТИТЕЛЬНЫЙ="$GSESSION"
Элиф [ "$DESKTOP" = "KDE" ]; тогда
ПРЕДПОЧТИТЕЛЬНЫЙ="$STARTKDE"
фи
фи
если [-n "$ ПРЕДПОЧТИТЕЛЬНЫЙ" ]; тогда
выполнить "$ ПРЕДПОЧТИТЕЛЬНЫЙ"
фи
# теперь, если мы можем добраться сюда, либо файл рабочего стола отсутствует, либо
# или запрошенный рабочий стол не установлен.
если [ -n "$GSESSION" -a -f /usr/share/xsessions/gnome.desktop ]; тогда
# по умолчанию запускаем GNOME.
exec "$GSESSION" --session=gnome
Элиф [-n "$STARTKDE"]; тогда
# если GNOME не установлен, попробуйте KDE.
выполнить "$STARTKDE"
фи
# Мы также должны поддерживать сценарии /etc/X11/xinit/Xclients.d
XCLIENTS_D=/etc/X11/xinit/Xclients.d
if [ "$#" -eq 1 ] && [ -x "$XCLIENTS_D/Xclients.$1.sh" ]; тогда
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
фи
# Отказоустойчивость.
# эти файлы остаются без дела TheNextLevel.
rm -f $HOME/Xrootenv.0
# Арх! Ничего хорошего не установлено. Вернуться к twm
{
# господи, нет ни fvwm95, ни fvwm2;
# вернуться к отказоустойчивым настройкам
[ -x /usr/bin/xsetroot ] && /usr/bin/xsetroot -solid '#222E45'
если [ -x /usr/bin/xclock ] ; тогда
/usr/bin/xclock -геометрия 100x100-5+5 &
фи
если [ -x /usr/bin/xterm ] ; тогда
/usr/bin/xterm -геометрия 80x50-50+150 &
фи
если [ -x /usr/bin/firefox -a -f /usr/share/doc/HTML/index.html ]; тогда
/usr/bin/firefox /usr/share/doc/HTML/index.html и
фи
если [ -x /usr/bin/twm ] ; тогда
исполняемый файл /usr/bin/twm
фи
}
Глупость в том, что после попытки запустить вторую vncсервер
около 50 раз, обычно это работает один раз, когда я останавливаю и снова запускаю службу, она снова ничего не показывает, кроме курсора мыши.
Свободной памяти осталось много (около 5 гигов), места для хранения тоже много (около 100 гигов). Когда я редактирую свой ~/.vnc/xstartup
файл, чтобы включить только файловый менеджер, он работает нормально каждый раз, проблема заключается в попытке запустить сеанс для нескольких пользователей.
Спасибо, что прочитали все это, я уже потерял бесчисленное количество часов, пытаясь отладить это без каких-либо (серьезных) улучшений.
ОБНОВЛЕНИЕ 1:
После многих часов работы я все еще не заработал gnome. Отчаянные времена требуют отчаянных мер, поэтому я просто установил Xfce и сделал его красивее с помощью красивой темы и пакета значков. Он просто работал после того, как я его установил. Я удалил все ссылки на гномов из xstartup
файлы и добавил startxfce4
.