Ubuntu 18.04 LTS x11vnc não funciona mais

3

Eu mudei recentemente do Ubuntu 16.04 LTS para o 18.04 LTS, pois precisava de uma versão mais nova do kvm / qemu.

Com o 16.04, pude obter facilmente o serviço x11vnc (daemon) executando seguindo as instruções da "Community Help Wiki": link

Isso tem um script necessário para configurar o serviço de daemon x11vnc, que permite que você faça login em uma máquina remotamente sem precisar primeiro efetuar login localmente. Eu preciso disso como eu tenho a minha máquina em execução como servidor e localizado no porão e eu sempre acessá-lo via VNC, não localmente.

Inicialmente, não fiz nada com a minha instalação limpa do 18.04 além de adicionar o script systemctl exatamente como as instruções da "Community Help Wiki": "Faça o x11vnc iniciar automaticamente pelo systemd em qualquer ambiente (Vivid +)".

Ao descobrir que isso não funcionava, fiz o seguinte com base em algumas pesquisas:

  1. Desabilitado o gerenciador de exibição "Wayland" editando /etc/gdm3/custom.conf e definindo WaylandEnable=false neste script:

    [daemon]
    # Uncoment the line below to force the login screen to use Xorg
    #WaylandEnable=false
    WaylandEnable=false  <--- HERE
    
  2. Alterado o comando /lib/systemd/system/x11vnc.service ExecStart para usar uma diretiva xauth diferente, como em 18.04 parece que não há nenhum arquivo $HOME/.Xauthority gerado automaticamente que pode ser encontrado por meio da diretiva -xauth guest :

    De:

    ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/USERNAME/.vnc/passwd -rfbport 5900 -shared
    

    Para:

     ExecStart=/usr/bin/x11vnc -auth /run/user/120/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /home/USERNAME/.vnc/passwd -rfbport 5920 -shared
    

Eu fiz isso com base em algumas leituras e testes no Xauthority, que indicavam que a localização do token .Xauthority agora é dada pela variável de ambiente $XAUTHORITY .

Para descobrir o valor disso, eu corro o seguinte comando " find " para descobrir quais processos têm uma variável de ambiente XAUTHORITY definida.

NOTA: isso usa a estrutura do arquivo linux /proc/<procid>/environ para procurar nas variáveis de ambiente do processo,

cd /proc
sudo find . -maxdepth 1 -type d -exec sh -c "(test -f '{}'/environ && cat '{}'/environ | tr '
sudo find . -maxdepth 1 -type d -exec sh -c "(test -f '{}'/environ && grep -aH XAUTHORITY= '{}'/environ )" \;
' '\n' | grep XAUTHORITY= )" \;

Isso retornou dois resultados diferentes:

  • XAUTHORITY=/run/user/120/gdm/Xauthority
  • XAUTHORITY=/run/user/1000/gdm/Xauthority

Em seguida, usei o seguinte para encontrar os IDs de processo correspondentes:

240 tty1     Sl+    0:00 /usr/lib/gnome-session/gnome-session-binary --autostart /usr/share/gdm/greeter/autostart
14923 tty2     Sl+    0:00 /usr/lib/gnome-session/gnome-session-binary --session=ubuntu

Os processos correspondentes para estes são:

13/05/2018 16:19:14 *** XOpenDisplay failed.

O primeiro deles parece estar associado à tela de boas-vindas de login, enquanto o segundo é a área de trabalho do usuário.

Uma verificação adicional das variáveis de ambiente mostra que uma tem USER=gdm e a outra tem USER=<ME>

O problema é que, se eu usar o local de autenticação "greeter", serei solicitado a fornecer uma senha que será seguida pela tela preta / em branco. Se eu usar o local de autenticação do usuário, não receberei nenhuma conexão do cliente, pois o status retornará um erro que não é capaz de abrir o Display:

[daemon]
# Uncoment the line below to force the login screen to use Xorg
#WaylandEnable=false
WaylandEnable=false  <--- HERE

Parece que você foi pego pela mudança no mecanismo do xauth.

Alguém por favor pode fornecer alguma orientação sobre isso?

    
por zebity 13.05.2018 / 08:38

3 respostas

2

Eu tive o mesmo problema e depois de algum trabalho com o x11vnc e o gdm, decidi simplesmente voltar ao lightdm:

apt install lightdm

Isso deve trazer a configuração do gerenciador de exibição. Se não for executado:

dpkg-reconfigure lightdm

Agora executo meu servidor x11vnc via supervisor com a seguinte configuração:

$ cat /etc/supervisor/conf.d/x11vnc.conf
[program:x11vnc]
command=/usr/bin/x11vnc -xkb -safer -nopw -once -geometry 1024x768 -auth /var/run/lightdm/root/\:0 -display :0
user=root
autorestart=true

Além disso, eu corro noVNC (também via supervisor) na parte superior para poder acessar minha área de trabalho remotamente apenas por meio de um navegador. Apenas para o caso de você estar interessado, os arquivos de configuração são assim:

$ cat /etc/supervisor/conf.d/novnc.conf
[program:noVNC]
command=/opt/noVNC/utils/launch.sh --vnc localhost:5900
user=root

$ cat /etc/nginx/sites-enabled/novnc
upstream vnc_proxy {
    server 127.0.0.1:6080;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    include snippets/snakeoil.conf;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
            auth_pam               "Secure Zone";
            auth_pam_service_name  "nginx";
            proxy_pass http://vnc_proxy/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            keepalive_requests 10000;

            proxy_read_timeout 61s;

            proxy_buffering off;
    }
}

Você pode querer incluir alguma segurança adicional em torno dele.

    
por Uli 15.05.2018 / 14:38
1

Usuários do Ubuntu 18.04 x11vnc.

Aqui está uma "resposta hack" que permite que você obtenha acesso VNC sem estar logado.

Eu digo hack, pois envolve ter dois serviços x11vnc em execução.

O primeiro é permitir o login via DISPLAY=:0 e o segundo é usar o VNC para obter acesso ao desktop via DISPLAY=:1

Para conseguir isso, usei os seguintes 2 daemon scripts:

O primeiro é: x11vnc-login.service apenas para saudação de login

[Unit]
Description=Start x11vnc-login at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth /run/user/120/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /home/<ID>/.vnc/password -rfbport 5922 -shared -display :0
[Install]
WantedBy=multi-user.target

A segunda é: x11vnc.service for desktop :

[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth /run/user/1000/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /home/<ID>/.vnc/password -rfbport 5920 -shared -display :0
[Install]
WantedBy=multi-user.target

A instalação e a ativação de scripts estão de acordo com a documentação no site de ajuda da comunidade .

Este é um hack horrível, mas me deixa correndo por enquanto, até que uma solução adequada seja encontrada.

Em uso, primeiro abro a sessão do VNC para a porta 5922 e faço o login. Uma vez logado, você acaba com uma tela preta. Então você abre a sessão do VNC na porta 5920 e voila, existe o seu desktop. Ainda mais fácil para mim do que ter que ir até onde a máquina do servidor está rodando ...

Obviamente, o que é necessário para ter algum script que faça uma pesquisa preliminar de processos em execução para ver se um usuário está logado e, em caso afirmativo, use apenas as informações de XAUTHORITY / DISPLAY da seção de usuário existente (conforme extraído de / proc / PROCID / environ, caso contrário, conecte o soquete à tela de boas-vindas com o XAUTHORITY / DISPLAY e, de alguma forma, mova a conexão do soquete para outra sessão x11vnc usando os valores de XAUTHOURITY / DISPLAY da área de trabalho dos usuários.

Um pouco de programação complexa de descritor de garfo / socket / arquivo eu suspeito.

Outra possibilidade é descobrir se há alguma maneira de fazer com que o gerenciador de exibição 18.04 se comporte de acordo com 16.04 anterior.

    
por zebity 15.05.2018 / 14:15
0

A maneira mais simples de fazer isso funcionar novamente é voltar do GDM3 para o LightDM.

Que, a propósito, não é absolutamente nenhum downgrade / passo atrás de qualquer forma.

ubuntu 18.04 conecte a tela de login através do VNC

    
por Seb 17.06.2018 / 15:06