Вопрос или проблема
Я настроил очень базовую сборку Debian (использовал образ с MATE).
В основном на этом сервере я ничего не делал, кроме:
- Установил TimeShift и сразу же сделал снимок после завершения установки.
- Затем добавил своего пользователя ‘boss’ в группу sudoers.
- Ни iptables, ни ufw не установлены.
После этого я попытался установить SSH, VNC, XRDP:
sudo apt update && sudo apt upgrade -y
sudo apt install -y openssh-server xrdp tightvncserver
# SSH
sudo systemctl enable ssh
sudo systemctl start ssh
# XRDP
echo "mate-session" > ~/.xsession
sudo systemctl restart xrdp
sudo systemctl enable xrdp
# VNC
vncpasswd
# Я установил простые пароли: 00000000 для полного доступа и 11111111 для просмотра только.
# Завершите и настройте сессию TightVNC
# Создайте xstartup
echo "#!/bin/sh" > ~/.vnc/xstartup
echo "export XDG_SESSION_TYPE=x11" >> ~/.vnc/xstartup
echo "mate-session &" >> ~/.vnc/xstartup
chmod +x ~/.vnc/xstartup
vncserver -kill :1
vncserver :1
Я пытаюсь подключиться из Windows, используя клиент TightVNC к системе Debian, и получаю ошибку
Ошибка в просмотрщике TightVNC: Не удалось установить соединение, так как целевая машина активно отказалась от него
$ ps aux | grep vnc
boss 60787 2.1 0.2 12432 9892 ? S 10:13 0:59 Xtightvnc :1 -desktop X -auth /home/boss/.Xauthority -geometry 1024x768 -depth 24 -rfbwait 120000 -rfbauth /home/boss/.vnc/passwd -rfbport 5901 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb
boss 160972 0.0 0.0 6332 2012 pts/0 S+ 11:01 0:00 grep vnc
$ netstat -tuln | grep 590
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN
Я могу получить новую ошибку Причина аутентификации: Аутентификация не удалась
, возможно, это произошло из-за перезапуска VNC или когда я полностью удалил файл vncpasswd и сгенерировал его заново.
Я настроил /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
и sudo systemctl restart ssh
В этом случае я вижу, как рисуется экран, но с ошибкой Не удалось получить имя на шине сеанса
Я пробовал такие вещи, как:
export DISPLAY=:1
export XAUTHORITY=$HOME/.Xauthority
rm ~/.Xauthority
xauth generate :1 . trusted
Я выяснил, что с xterm я могу получить подключение, т.е. xstartup
с:
export XDG_SESSION_TYPE=x11
export XAUTHORITY=$HOME/.Xauthority
export DISPLAY=:1
xterm &
Это максимум, чего я достиг. Некоторые другие вещи, которые я пробовал:
boss@hp2:~/.vnc$ ls -l ~/.Xauthority -rw------- 1 boss boss 146 Dec 2 08:16 /home/boss/.Xauthority boss@hp2:~/.vnc$ xauth generate :1 . trusted xauth: (argv):1: нельзя запросить расширение безопасности на дисплее ":1" boss@hp2:~/.vnc$ xauth generate :0 . trusted Требуется авторизация, но протокол авторизации не задан xauth: (argv):1: невозможно открыть дисплей ":0". boss@hp2:~/.vnc$ xauth list hp2.WORKGROUP:1 MIT-MAGIC-COOKIE-1 a88caa26b603ed5c705c4ce7405e9709 hp2/unix:1 MIT-MAGIC-COOKIE-1 a88caa26b603ed5c705c4ce7405e9709 hp2/unix:10 MIT-MAGIC-COOKIE-1 b843b75c08de4094a345ce4e1f55d021 boss@hp2:~/.vnc$ cat ~/.Xauthority 1MIT-MAGIC-COOKIE-1&\p\L@^ hp21MIT-MAGIC-COOKIE-1&\p\L@^ hp210MIT-MAGIC-COOKIE-1C@ENU!boss@hp2:~/.vnc$ vi xstartup boss@hp2:~/.vnc$ cat xstartup #!/bin/sh export XDG_SESSION_TYPE=x11 export XAUTHORITY=$HOME/.Xauthority mate-session & boss@hp2:grep -e X11Forwarding -e X11UseLocalhost /etc/ssh/sshd_config
boss@hp2:~/.vnc$ !123 grep -e X11Forwarding -e X11UseLocalhost /etc/ssh/sshd_config X11Forwarding yes X11UseLocalhost yes # X11Forwarding no boss@hp2:~/.vnc$ sudo systemctl restart ssh [sudo] пароль для boss:
boss@hp2:~/.vnc$ export DISPLAY
boss@hp2:~/.vnc$ export DISPLAY=:1
boss@hp2:~/.vnc$ export XAUTHORITY
boss@hp2:~/.vnc$ export XAUTHORITY=$HOME/.Xauthority
boss@hp2:~/.vnc$ vncserver -kill :1
vncserver :1
Убийство процесса Xtightvnc ID 5802
Новый 'X' рабочий стол - hp2:1
Запуск приложений, указанных в /home/boss/.vnc/xstartup
Файл журнала - /home/boss/.vnc/hp2:1.log
Я попробовал это, что нашел, предлагая в интернете:
export XDG_SESSION_TYPE=x11
export XAUTHORITY=$HOME/.Xauthority
export DISPLAY=:1
# Запустите dbus, если он еще не запущен
if ! pgrep -x "dbus-daemon" > /dev/null; then
eval "$(dbus-launch --sh-syntax)"
echo "DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS" >> ~/.dbus/Xdbus
echo "DBUS_SESSION_BUS_PID=$DBUS_SESSION_BUS_PID" >> ~/.dbus/Xdbus
fi
# Источник окружения dbus
if [ -f ~/.dbus/Xdbus ]; then
source ~/.dbus/Xdbus
fi
mate-session > ~/.vnc/mate-session.log &
Не удается, та же ошибка sebs dbus, как раньше, но я могу получить информацию из журнала:
boss@hp2:~/.vnc$ cat hp2:1.log 02/12/24 10:13:35 Xvnc версия TightVNC-1.3.10 02/12/24 10:13:35 Авторское право (C) 2000-2009 Группа TightVNC 02/12/24 10:13:35 Авторское право (C) 1999 AT&T Laboratories Cambridge 02/12/24 10:13:35 Все права защищены. 02/12/24 10:13:35 См. http://www.tightvnc.com/ для информации о TightVNC 02/12/24 10:13:35 Имя рабочего стола 'X' (hp2:1) 02/12/24 10:13:35 Поддерживаемые версии протокола: 3.3, 3.7, 3.8, 3.7t, 3.8t 02/12/24 10:13:35 Прослушивание VNC-соединений на TCP-порту 5901 mate-session-is-accelerated: Нет составного расширения. mate-session-check-accelerated: GL помощник завершился с кодом 256 mate-session-check-accelerated: GLES помощник завершился с кодом 512 mate-session[60795]: ПРЕДУПРЕЖДЕНИЕ: Не удалось получить org.gnome.SessionManager
02/12/24 10:13:55 Получено соединение от клиента 192.168.1.29 02/12/24 10:13:55 Используется версия протокола 3.8 02/12/24 10:13:55 Включение расширений протокола TightVNC 02/12/24 10:13:58 Аутентификация только для просмотра прошла от 192.168.1.29 02/12/24 10:13:58 Используется плоское кодирование для клиента 192.168.1.29 02/12/24 10:13:58 rfbProcessClientNormalMessage: игнорирование неизвестного кодирования 16 02/12/24 10:13:58 Используется уровень качества изображения 6 для клиента 192.168.1.29
02/12/24 10:13:58 rfbProcessClientNormalMessage: игнорирование неизвестного кодирования -223
02/12/24 10:13:58 Включение расширения протокола LastRect для клиента 192.168.1.29
02/12/24 10:13:58 Включение обновлений позиции курсора для клиента 192.168.1.29
02/12/24 10:13:58 Включение обновлений курсора полного цвета для клиента 192.168.1.29
02/12/24 10:14:03 Клиент 192.168.1.29 ушел
02/12/24 10:14:03 Статистика:
02/12/24 10:14:03 событий клавиатуры получено 1, событий указателя 166
02/12/24 10:14:03 обновления кадровой буфера 1, прямоугольников 18, байтов 5776
02/12/24 10:14:03 Последние отметки 1, байтов 12
02/12/24 10:14:03 обновления формы курсора 1, байтов 1068
02/12/24 10:14:03 обновления позиции курсора 1, байтов 12
02/12/24 10:14:03 плотные прямоугольники 15, байтов 4684
02/12/24 10:14:03 необработанные байты эквивалентны 3145740, коэффициент сжатия 671.592656
02/12/24 10:14:09 Получено соединение от клиента 192.168.1.29
02/12/24 10:14:09 Используется версия протокола 3.8
02/12/24 10:14:09 Включение расширений протокола TightVNC
02/12/24 10:14:11 Аутентификация полного контроля прошла от 192.168.1.29
02/12/24 10:14:11 Используется плоское кодирование для клиента 192.168.1.29
02/12/24 10:14:11 rfbProcessClientNormalMessage: игнорирование неизвестного кодирования 16
02/12/24 10:14:11 Используется уровень качества изображения 6 для клиента 192.168.1.29
02/12/24 10:14:11 rfbProcessClientNormalMessage: игнорирование неизвестного кодирования -223
02/12/24 10:14:11 Включение расширения LastRect протокола для клиента 192.168.1.29
02/12/24 10:14:11 Включение обновлений позиции курсора для клиента 192.168.1.29
02/12/24 10:14:11 Включение обновлений курсора полного цвета для клиента 192.168.1.29
mate-session[60795]: Gtk-CRITICAL: gtk_main_quit: утверждение 'main_loops != NULL' не выполнено
mate-session[60795]: ПРЕДУПРЕЖДЕНИЕ: GSIdleMonitor: Счетчик IDLETIME не найден
mate-session[60795]: GLib-GObject-CRITICAL: Пользовательский конструктор для класса GSIdleMonitor вернул NULL (что недопустимо). Пожалуйста, используйте GInitable вместо.
discover_other_daemon: 1mate-session[60795]: ПРЕДУПРЕЖДЕНИЕ: Не удалось найти поставщика '' необходимого компонента 'dock'
** (mate-settings-daemon:60815): ПРЕДУПРЕЖДЕНИЕ **: 10:14:13.999: Не удалось получить org.mate.SettingsDaemon
** (mate-settings-daemon:60815): ПРЕДУПРЕЖДЕНИЕ **: 10:14:13.999: Не удалось получить имя
Предупреждение управляющего окна: Уровень журнала 128: unsetenv() не является потокобезопасным и не должен использоваться после создания потоков
Предупреждение управляющего окна: Уровень журнала 32: не удалось найти расширение XKB.
Не удается зарегистрировать панельное приложение: одно уже работает.
discover_other_daemon: 1discover_other_daemon: 1discover_other_daemon: 1Ошибка: Инициализация модуля не удалась
Предупреждение управляющего окна: Отсутствует составное расширение, необходимое для композитинга
** (mate-volume-control-status-icon:60844): ПРЕДУПРЕЖДЕНИЕ **: 10:14:14.798: Значок состояния уже выполняется, выход
** (light-locker:60856): ОШИБКА **: 10:14:14.966: Переменная окружения XDG_SESSION_PATH не задана. Запущен ли LightDM?
** (mate-screensaver:60849): ПРЕДУПРЕЖДЕНИЕ **: 10:14:15.305: Защитная заставка уже запущена в этой сессии
(mate-power-manager:60852): PowerManager-ОШИБКА **: 10:14:15.509: Ошибка в dbus - GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Доступ запрещен
Это самая базовая конфигурация, которую я могу попробовать с VNC, совершенно голый Debian, свежепоставленный и обновленный, и это полная неудача во всем (кроме xterm
!). Надеюсь, здесь достаточно информации, чтобы указать на решение этой проблемы. Не хватает ли мне каких-либо важных компонентов (но я подумал, что VNC должен установить критические компоненты в качестве зависимостей)? Может кто-нибудь подсказать, как это исправить, пожалуйста?
Ответ или решение
Для настройки VNC на чистой установке Debian 12 с окружением рабочего стола MATE, следуйте этим пошаговым инструкциям для успешного подключения и устранения проблем.
1. Установка необходимых компонентов
Первым делом обновите пакеты и установите необходимые компоненты:
sudo apt update && sudo apt upgrade -y
sudo apt install -y openssh-server xrdp tightvncserver
2. Настройка SSH
После установки SSH, убедитесь, что служба запущена и включена:
sudo systemctl enable ssh
sudo systemctl start ssh
3. Настройка XRDP
Создайте файл ~/.xsession
, который указывает, что необходимо запускать MATE:
echo "mate-session" > ~/.xsession
Затем проверьте и активируйте XRDP:
sudo systemctl enable xrdp
sudo systemctl restart xrdp
4. Настройка VNC
Теперь перейдите к настройке VNC:
-
Установите пароль для VNC:
vncpasswd
-
Создайте файл
xstartup
для VNC:mkdir -p ~/.vnc echo "#!/bin/sh" > ~/.vnc/xstartup echo "export XDK_SESSION_TYPE=x11" >> ~/.vnc/xstartup echo "mate-session &" >> ~/.vnc/xstartup chmod +x ~/.vnc/xstartup
-
Запустите сервер VNC:
vncserver :1
5. Проверка сети
Проверьте, что VNC сервер запущен и слушает на порту 5901:
netstat -tuln | grep 590
Должен появиться вывод, подтверждающий прослушивание порта 5901.
6. Подключение к VNC-клиенту
Попробуйте подключиться с клиента TightVNC с Windows, указав IP адрес вашего Debian сервера и порт, например 192.168.1.x:5901
. Если вы получаете ошибки подключения, это может быть связано с проблемами конфигурации или сетевыми настройками.
7. Устранение ошибок
Если вы получаете ошибку "Authentication failed" или другие ошибки, попробуйте следующее:
-
Убедитесь, что файл
~/.vnc/passwd
существует и у пользователя есть права на его чтение. -
Удалите
~/.Xauthority
и создайте его заново:rm ~/.Xauthority xauth generate :1 . trusted
-
Если отображается сообщение "Could not acquire name on session bus", возможно, требуется запуск D-Bus. Добавьте этот код в свой
xstartup
:if ! pgrep -x "dbus-daemon" > /dev/null; then eval "$(dbus-launch --sh-syntax)" fi
8. Логи и диагностика
Если VNC по-прежнему не работает, изучите логи VNC, чтобы понять причину ошибки:
cat ~/.vnc/your_host_name:1.log
Обратите внимание на сообщения об ошибках, которые могут помочь в диагностике проблемы, например, предупреждения о переменных среды XDG и XAUTHORITY.
Заключение
Следуя данным шагам, вы сможете успешно настроить и подключить VNC к вашей установки Debian 12 с MATE. Если возникнут дополнительные вопросы или трудности, учитывайте наличие сообществ и форумов, которые могут предложить поддержку и советы при работе с Linux и VNC.