Как настроить x11vnc для доступа с графическим экраном входа?

У меня есть сервер под управлением Ubuntu 12.10, и мне нужно иметь возможность удаленного доступа к этому серверу без входа в систему.

Я нашел много решений, но ни одно из них не работает с 12.10.

Может ли кто-нибудь дать мне пошаговые инструкции о том, как настроить x11vnc для запуска в качестве службы (до входа в систему пользователя), чтобы при соединении с VNC мне был представлен графический экран входа?

Я новичок в Linux, поэтому, пожалуйста, дайте как можно больше подробностей в своих ответах / комментариях.

Благодаря

58
задан 17 December 2012 в 23:00

10 ответов

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
3
ответ дан 17 December 2012 в 23:00

Ответы, приведенные выше, решают проблему, хотя пара поправок для версий Ubuntu с systemd (15.04+), а именно:

  • Воспользуйтесь новой -угадайте функциональностью в x11vnc - это помогает!
  • Обновление для systemd (не upstart)

Для установки выполните следующее:

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
54
ответ дан 17 December 2012 в 23:00

Я использую свою собственную оболочку: 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

Он автоматически запускается при загрузке, даже на экране входа в систему запрашивается пароль.

0
ответ дан 17 December 2012 в 23:00

Установить 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

45
ответ дан 17 December 2012 в 23:00

Вот конфигурация, работающая для 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.

1
ответ дан 17 December 2012 в 23:00

Используйте мой скрипт для легкой настройки: installvncubuntu1604.sh

Usage:

chmod +x ./installvncubuntu1604.sh; sudo ./installvncubuntu1604.sh
1
ответ дан 17 December 2012 в 23:00

Установить пакет 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

Это необходимо для добавления для всех пользователей

. Это будет выполняться только после входа пользователя в систему

0
ответ дан 17 December 2012 в 23:00

Вот как:

  1. Установите сервер X11VNC (или через Ubuntu Центр программного обеспечения -> Сервер X11VNC)

     sudo apt-get install x11vnc
     
  2. Создайте файл паролей VNC.

     sudo x11vnc -storepasswd yourVNCpassword ЗДЕСЬ /etc/x11vnc.pass
     
  3. Создайте файл задания в редакторе nano (или gedit, leafpad и т. Д.).

     sudo nano /etc/init/x11vnc.conf
     
  4. Вставьте это в файл:

     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
    
    конец сценария
     
  5. Сохраните файл. Вы создали задание для события Upstart login-session-start .

  6. Перезапустите Ubuntu.

Вот и все! Теперь вы должны иметь возможность подключиться к любому клиенту VNC даже до входа в систему.

14
ответ дан 17 December 2012 в 23:00

Если вы работаете с Ubuntu 19.04, вы можете проверить это с помощью моего ответа, как я понял.

ответ babelmonk почти решает мою проблему. Но у меня проблема с диспетчером отображения (для работы со страницей входа). Я использую Ubuntu 19.04, в котором используется gdm3. И все же, даже с параметром 'smart' -guess из x11vnc мне не удалось подключиться к моей Ubuntu. Поэтому я заменил его на lightdm, который работает хорошо. [1221 8] Вы можете изменить свой диспетчер отображения с помощью этой команды:

sudo dpkg-reconfigure gdm3

Кстати, если вы хотите выполнить полную настройку x11vnc, я написал полную инструкцию .

0
ответ дан 5 January 2021 в 23:31

Альтернатива смене диспетчера отображения, чтобы исправить это на рабочем столе 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
0
ответ дан 24 April 2021 в 03:26

Другие вопросы по тегам:

Похожие вопросы: