У меня есть сервер под управлением Ubuntu 12.10, и мне нужно иметь возможность удаленного доступа к этому серверу без входа в систему.
Я нашел много решений, но ни одно из них не работает с 12.10.
Может ли кто-нибудь дать мне пошаговые инструкции о том, как настроить x11vnc
для запуска в качестве службы (до входа в систему пользователя), чтобы при соединении с VNC мне был представлен графический экран входа?
Я новичок в Linux, поэтому, пожалуйста, дайте как можно больше подробностей в своих ответах / комментариях.
Благодаря
babelmonks ответят как сценарий bash, скопируйте и сохраните как x11vnc.sh и запустите с помощью sudo bash /path/to/file/x11vnc.sh (извините, у меня недостаточно репутации, чтобы оставить комментарий)
#!/bin/bash
#install x11vnc & set password
apt-get install x11vnc -y
x11vnc -storepasswd 123456 /etc/x11vnc.pass
#create config file for system service
cat > /lib/systemd/system/x11vnc.service <<-EOF
[Unit]
Description="x11vnc"
Requires=display-manager.service
After=display-manager.service
[Service]
ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth guess -rfbauth /etc/x11vnc.pass
ExecStop=/usr/bin/killall x11vnc
[Install]
WantedBy=multi-user.target
EOF
#restart new services & enable on boot
systemctl daemon-reload
systemctl start x11vnc
systemctl enable x11vnc
Ответы, приведенные выше, решают проблему, хотя пара поправок для версий Ubuntu с systemd (15.04+), а именно:
-угадайте
функциональностью в x11vnc - это помогает! Для установки выполните следующее:
sudo apt-get install x11vnc
sudo x11vnc -storepasswd yourVNCpasswordHERE /etc/x11vnc.pass
# for Ubuntu 15.04+
sudo nano /lib/systemd/system/x11vnc.service
# for Ubuntu 16.10+
sudo nano /etc/systemd/system/x11vnc.service
Вставьте это в файл:
[Unit]
Description="x11vnc"
Requires=display-manager.service
After=display-manager.service
[Service]
ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth guess -rfbauth /etc/x11vnc.pass
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
Restart-sec=2
[Install]
WantedBy=multi-user.target
Затем начните с:
sudo systemctl daemon-reload
sudo systemctl start x11vnc
И убедитесь, что служба запускается при загрузке:
sudo systemctl enable x11vnc
Я использую свою собственную оболочку: https://github.com/dvdvideo1234/UbuntuBatches/tree/master/x11VNC
start on login-session-start
script
sudo /usr/bin/x11vnc -xkb -auth /var/run/lightdm/root/:0 -noxrecord -noxfixes -noxdamage -rfbauth /var/srv/x11vnc/x11vnc.pass -forever -bg -rfbport <your_port> -o /var/srv/x11vnc/x11vnc.log
end script
в файл:
/etc/init/x11vnc.conf
Он автоматически запускается при загрузке, даже на экране входа в систему запрашивается пароль.
Установить x11vnc:
sudo apt-get install x11vnc
Создайте пароль для вашего пользователя:
x11vnc -storepasswd
Если у вас есть установка ssh, вы можете использовать ее для запуска x11vnc, предполагая, что вы уже вошли в систему, но не забудьте сообщить это для использования файла паролей:
x11vnc -usepw
Если вы не вошли в систему, вы получите сообщение об ошибке с объяснением:
If NO ONE is logged into an X session yet, but there is a greeter login
program like "gdm", "kdm", "xdm", or "dtlogin" running, you will need
to find and use the raw display manager MIT-MAGIC-COOKIE file.
Some examples for various display managers:
gdm: -auth /var/gdm/:0.Xauth
-auth /var/lib/gdm/:0.Xauth
kdm: -auth /var/lib/kdm/A:0-crWk72
-auth /var/run/xauth/A:0-crWk72
xdm: -auth /var/lib/xdm/authdir/authfiles/A:0-XQvaJk
dtlogin: -auth /var/dt/A:0-UgaaXa
Предполагая, что вы используете lightdm для входа в систему, вы можете решить эту проблему, вы можете запустить x11vnc с помощью команды:
sudo x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw
Я не уверен, что это лучшая идея запускать x11vnc от имени root. Может быть, кто-нибудь сможет отредактировать способ доступа к логину без использования sudo.
Как только это будет запущено, вы сможете подключиться с помощью клиента vnc, такого как krdc (для KDE). Возможно, вы захотите использовать Экран GNU , чтобы поддерживать работу x11vnc без необходимости открытия сеанса ssh
Я смог выяснить это с помощью http://ubuntuforums.org/showthread.php?t = 2039022 .
Вот пример задания выскочки, которое вы можете использовать, чтобы запустить его при запуске. Его нужно поместить в /etc/init/x11vnc.conf. (Обратите внимание, что более новые версии Ubuntu используют systemd, поэтому см. Другой ответ, в котором есть образец конфигурации systemd):
# description "start and stop x11vnc"
description "x11vnc"
start on runlevel [2345]
stop on runlevel [^2345]
console log
#chdir /home/
#setuid 1000
#setgid 1000
respawn
respawn limit 20 5
exec x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw
После того, как вы создали этот файл, вы можете запустить его, запустив: sudo start x11vnc Вы можете проверить журнал по адресу: /var/log/upstart/x11vnc.log
Вот конфигурация, работающая для sddm
(для KDE 5). В настоящее время -auth guess
не работает для sddm
, файл аутентификации каждый раз отличается, поэтому нам нужно что-то вроде -auth / var / run / sddm / *
.
Служба выглядит так:
[Unit]
Description="x11vnc"
After=multi-user.target
[Service]
ExecStart=/bin/sh -c "/usr/bin/x11vnc -xkb -noxrecord -display :0 -auth /var/run/sddm/* -rfbauth /etc/x11vnc.pass"
ExecStop=/usr/bin/killall x11vnc
[Install]
WantedBy=multi-user.target
Я должен поставить ее после multi-user.target
, если после display-manager.service
, x11vnc
не может найти auth файл, возможно, sddm
сгенерирует файл аутентификации позже. Это проверено на Manjaro 18.
Используйте мой скрипт для легкой настройки: installvncubuntu1604.sh
Usage:
chmod +x ./installvncubuntu1604.sh; sudo ./installvncubuntu1604.sh
Установить пакет x11vnc
#sudo apt-get install x11vnc
Затем установить пароль
#x11vnc -usepw
Затем создать сценарий запуска для x11vnc
#sudo nano /etc/x11vnc.sh
В файле:
/usr/bin/x11vnc -bg -forever -shared -reopen -usepw
Затем сохранить
#sudo chmod 777 /etc/x11vnc.sh
Затем добавить файл сценария в Control Центр => Приложение для запуска Затем щелкните Добавить
> Name-----------x11vnc
> Команда ----- <сопоставить файл сценария
> Comment------service
Это необходимо для добавления для всех пользователей
. Это будет выполняться только после входа пользователя в систему
Вот как:
Установите сервер X11VNC (или через Ubuntu Центр программного обеспечения -> Сервер X11VNC)
sudo apt-get install x11vnc
Создайте файл паролей VNC.
sudo x11vnc -storepasswd yourVNCpassword ЗДЕСЬ /etc/x11vnc.pass
Создайте файл задания в редакторе nano (или gedit, leafpad и т. Д.).
sudo nano /etc/init/x11vnc.conf
Вставьте это в файл:
start on login-session-start
сценарий
/ usr / bin / x11vnc -xkb -forever -auth / var / run / lightdm / root /: 0 -display: 0 -rfbauth /etc/x11vnc.pass -rfbport 5900 -bg -o /var/log/x11vnc.log
конец сценария
Сохраните файл. Вы создали задание для события Upstart login-session-start .
Вот и все! Теперь вы должны иметь возможность подключиться к любому клиенту VNC даже до входа в систему.
Если вы работаете с Ubuntu 19.04, вы можете проверить это с помощью моего ответа, как я понял.
ответ babelmonk почти решает мою проблему. Но у меня проблема с диспетчером отображения (для работы со страницей входа). Я использую Ubuntu 19.04, в котором используется gdm3. И все же, даже с параметром 'smart' -guess
из x11vnc мне не удалось подключиться к моей Ubuntu. Поэтому я заменил его на lightdm, который работает хорошо. [1221 8] Вы можете изменить свой диспетчер отображения с помощью этой команды:
sudo dpkg-reconfigure gdm3
Кстати, если вы хотите выполнить полную настройку x11vnc, я написал полную инструкцию .
Альтернатива смене диспетчера отображения, чтобы исправить это на рабочем столе Ubuntu 20 или Ubuntu 21 Desktop - это сценарий, который можно обойти. В стандартной настольной установке Ubuntu X11VNC не работает перед входом в систему. Этот сценарий автоматически переключает Xauthority на использование при входе в систему и при отображении на экране входа в систему даже при использовании GDM3 в качестве диспетчера отображения.
Кроме того, этот также автоматически настраивает X11VNC, предполагая, что он уже установлен.
Он также запускает X11VNC через tmux, чтобы вы могли видеть, в чем проблема после входа в систему, если у вас возникнут проблемы.
#!/bin/bash
if [ -z "$1" ]; then echo "Please pass the password you would like to use as an argument to this script"; exit 1 ; else echo "Good start.going ahead."; fi
apt update && apt install tmux -y
password=$1
passwordfile='/etc/x11vnc.pass'
servicefile='/etc/systemd/system/x11vnc.service'
timerfile='/etc/systemd/system/x11vnc.timer'
script='/usr/bin/startxvnc'
apt-get update
apt-get install x11vnc net-tools -y
x11vnc -storepasswd $password $passwordfile
cat >$servicefile <<'EOT'
[Unit]
Description="x11vnc"
Requires=display-manager.service
[Service]
Type=simple
#Environment=XAUTHORITY=$(ps aux | grep -o -E "(-auth)(.*)(Xauth)[a-zA-Z]+")
#ExecStartPre=tmux new -s x11vnc -d
ExecStart=bash -c /usr/bin/startxvnc
#ExecStop=tmux kill-session -t x11vnc
Restart=on-failure
RestartSec=2
[Install]
WantedBy=graphical.target
WantedBy=multi-user.target
EOT
cat >$timerfile <<'EOT'
Unit]
Description=Wait for some time before running X11VNC
[Timer]
OnBootSec=5sec
[Install]
WantedBy=timers.target
EOT
cat >$script <<'EOT'
#!/bin/bash
getxauths()
{
xauths=()
ps aux | grep -o -E "(-auth)(.*)(Xauth)[a-zA-Z]+" | (while IFS= read -r xauth
do
xauths+=("$xauth")
done
printf "%s\n" "${xauths[@]}" | sort -u
) }
getpname()
{
#psp=$(ps -p $(lsof -t -i:5900) -o command)
psp=$(cat /proc/$(lsof -t -i:$1)/cmdline)
echo $psp
}
killproc()
{
pkill -9 $(lsof -t -i:$1)
echo "Killed by port $1"
}
starttmux()
{
xauth=$1
tmux new -s $xauth -d
tmux send-keys -t $xauth:0 "for (( ; ; )) ; do sleep 3s; ((disp ^= 1)) ; /usr/bin/x11vnc -display :\$disp -auth $xauth -rfbauth /etc/x11vnc.pass -shared -forever ; done" Enter
}
#echo $(getpname)
start() {
for (( ; ; )) ; do
#echo $psp
xauths=$(getxauths)
for xauth in $xauths ; do
xauth="$xauth" | xargs
if [[ ${xauth} != *"-auth"* ]];then
unset tsessions
tsessions=($(tmux list-sessions -F '#{session_name}'))
echo "tessions is " ${tsessions[@]}
echo "xauth is " ${xauth}
if [[ ! " ${tsessions[@]} " =~ " ${xauth} " ]]; then
starttmux $xauth
psp=$(getpname 5900)
echo $psp | grep -E -o "(-auth)(.*)(Xauth)[a-zA-Z]+" | (while IFS= read -r xold
do
sessionname=$(echo ${xold#"-auth"} | xargs)
#tmux kill-session -t "$sessionname"
if [[ ! " ${tsessions[@]} " =~ " ${xauth} " ]]; then
if [[ $psp == *"user/125"* ]] ; then killproc 5900 ; tmux kill-session -t "$sessionname" ; echo "session name is $sessionname" ;
fi ; else starttmux $xauth ; sleep 30s ; fi
done)
fi
fi
done
sleep 3s
done
}
start
EOT
chmod u+x $script
sed -i -e 's/WaylandEnable=true/WaylandEnable=false/g' /etc/gdm3/custom.conf
sed -i -e 's/#WaylandEnable=false/WaylandEnable=false/g' /etc/gdm3/custom.conf
systemctl daemon-reload
systemctl enable x11vnc.timer
systemctl stop x11vnc.service
systemctl disable x11vnc.service
systemctl restart x11vnc.timer