web-dev-qa-db-fra.com

x11vnc beaucoup plus lent que Xvnc + comment obtenir une session Xubuntu manuellement

J'utilise Xubuntu 12.04 sur un serveur sans tête dans une machine virtuelle VMware. Je préférerais utiliser x11vnc plutôt que Xvnc pour utiliser LightDM et le serveur X démarré par LightDM (et vous connecter à l'aide de Xubuntu-session plutôt que xfce4).

Le problème est que _x11vnc_ est beaucoup plus lent que Xvnc (à la fois _vnc4server_ et tightvncserver saveurs). Je suis sur une connexion haut débit à faible vitesse et, par exemple, le fait de faire glisser les fenêtres est visiblement plus lent sur _x11vnc_, environ 3 ou 4 fois plus lent, je dirais.

Je force les formats 16 bits et 1280x800 sur x11vnc et Xvnc, mais je ne suis pas sûr que x11vnc utilise réellement 16 bpp (voir les journaux ci-dessous).

x11vnc

Je lance x11vnc avec un script de démarrage dans/etc/init/x11vnc:

_start on login-session-start
script
x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 \
  -auth /var/run/lightdm/root/:0 -forever -shared -bg \
  -o /var/log/x11vnc.log -rfbport 5901 -localhost -nopw -xrandr
end script
_

Par défaut, cela démarrera en 800x600 avec 32 bpp, ce qui ne peut pas être changé via les paramètres de ligne de commande. Je devais faire:

_apt-get install xserver-xorg-video-dummy
_

puis créez /etc/X11/xorg.conf (qui n'existait pas par défaut) avec le contenu:

_Section "Device"
    Identifier  "Configured Video Device"
    Driver      "dummy"
EndSection

Section "Monitor"
    Identifier  "Configured Monitor"
    HorizSync 31.5-48.5
    VertRefresh 50-70
EndSection

Section "Screen"
    Identifier  "Default Screen"
    Monitor     "Configured Monitor"
    Device      "Configured Video Device"
    DefaultDepth 16
    SubSection "Display"
    Depth 16
    Modes "1280x800"
    EndSubSection
EndSection
_

Lors de la connexion, /var/log/x11vnc.log dit:

_30/11/2013 07:12:32 Pixel format for client 127.0.0.1:
30/11/2013 07:12:32   16 bpp, depth 16, little endian
30/11/2013 07:12:32   true colour: max r 31 g 63 b 31, shift r 11 g 5 b 0
30/11/2013 07:12:32 no translation needed
_

notez la partie true color.

En outre, il y a encore de la transparence dans le panneau inférieur lors de l'utilisation de 16bpp dans x11vnc, alors que lors de l'utilisation de "-depth 16" avec Xvnc, tous les panneaux transparents ont une couleur unie et l'option "alpha" de la configuration du panneau a disparu. Cela me fait penser que XFCE détecte toujours un affichage 32 bits lors de l'utilisation de x11vnc, ce qui peut être une cause de lenteur.

J'ai aussi essayé _xserver-command=X -depth 16_ dans _/etc/lightdm/lightdm.conf_, mais je n'ai fait aucune différence.

Xvnc

J'ai fait:

_apt-get install vnc4server
vncserver :1 -depth 16 -geometry 1280x800
_

Cela démarre une nouvelle session X, selon ce que j'ai dans _~/.vnc/startup_, qui est:

_#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
# x-window-manager &
startxfce4 &
_

Il n'y a pas de fil de fer par défaut. Faire glisser les fenêtres montre la fenêtre entière, pas seulement une bordure, et elle reste visiblement plus rapide que x11vnc qui montre seulement un fil de fer lorsque vous faites glisser des fenêtres! Même chose si je remplace vnc4server par tightvncserver.

Tout indice sur la façon de rendre x11vnc aussi rapide? Il doit être capable d'une manière ou d'une autre!

J'ai essayé toutes sortes d'options pour x11vnc (de tout thos -nox * -nowireframe, etc.) sans succès.

Alternativement, je pourrais arrêter LightDM et démarrer Xvnc avec le fichier ~/.vnc/xstartup afin qu'il démarre la même session Xubuntu comme il le fait depuis l'écran de connexion LilghtDM, plutôt que la session XFCE4 ... mais je ne le fais pas sais pas comment. J'ai remplacé _startxfce4_ par _/etc/X11/Xsession_ mais cela n'a pas la même apparence. Les polices sont plus petites et il y a des artefacts.

Toute aide serait appréciée!

5
Normadize

J'ai réussi à répondre à la partie Alternative de ma question, c'est-à-dire utiliser vnc4server ou tightvncserver pour démarrer une session Xubuntu au lieu d'une session XFCE en clair. Ceci est distinct de LightDM, qui peut ensuite être arrêté ou mis manuellement. J'examinerai les suggestions de Nicholas plus tard.

Cela équivaut à une connexion via LightDM avec une session Xubuntu. Elle reste active si ma connexion vnc meurt ou si je me déconnecte, et je profite des personnalisations de Xubuntu.

Pour ce faire, assurez-vous que ~/.vnc/xstartup ne contienne que ce qui suit:

#!/bin/sh
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xubuntu:/etc/xdg:/etc/xdg
export XDG_DATA_DIRS=/usr/share/xubuntu:/usr/local/share/:/usr/share/:/usr/share
vncconfig -iconic &
. lightdm-session

Vous pouvez remplacer . lightdm-session par exec startxfce4 ou startxfce4 &. Le premier est ce que LightDM appelle, mais il appelle finalement xfce4-session.

Ceci démarre alors une session Xubuntu, plutôt qu'une simple XFCE, et vous pouvez arrêter LightDM si l'accès X/clavier n'est pas nécessaire.

Vous pouvez configurer un démon en plaçant les éléments suivants dans /etc/init/vncserver.conf:

start on runlevel [2345]
stop on runlevel [016]
post-start script
        su USER -c "vncserver :1 -geometry 1280x800 -depth 16 -localhost -SecurityTypes None"
end script
post-stop script
        su USER -c "vncserver -kill :1"
end script

Puis démarrez/arrêtez-le avec start vncserver. Ce qui précède s’applique à vnc4server et ne lancera l’écoute Xvnc que sur 127.0.0.1 et n’exigera pas de mot de passe. C’est pratique pour moi car j’utilise quand même un tunnel ssh:

ssh -L6901:127.0.0.1:5901 [email protected]

Si vous utilisez tightvncserver, supprimez l’option - SecurityTypes None , car elle ne la comprend pas. Notez que tightvncserver demande toujours un mot de passe (vous ne pouvez pas le rendre sans mot de passe).

REMARQUE: si USER ci-dessus n'est pas une racine ou si vous exécutez "vncserver: 1 [options]" en tant que non-root, il y aura des problèmes avec XFCE dans le sudo-ing dans les applications à interface graphique, car le sous-jacent Sudo -ed app ne trouvera pas d’affichage X. Je n'ai pas encore trouvé de solution à ce problème. Avec x11vnc, cela fonctionne car x11vnc se connecte à une session X existante, y compris celle: 0.

1
Normadize