Ces instructions sont destinées à créer un écran "supplémentaire" pour votre machine linux à l'aide d'une tablette ou de n'importe quel ordinateur via un client VNC.
J'ai fait ces étapes dans Mageia3 32Bit (je n'ai pas essayé 64bit) mais cela devrait être similaire pour d'autres distros aussi (i.e. Ubuntu).
Assurez-vous que vous avez tous les paquets requis avec la commande suivante dans le terminal :
sudo apt-get install gcc autoconf automake x11-font-util libtool libxi-devel ibopenssl-devel libxfont1-devel libpam-devel x11-util-macros x11-xtrans-devel x11-server-xvfb x11-server-xdmx x11-server-devel x11-server-source
Une fois que vous avez tous les paquets ci-dessus, lancez ces commandes :
cd /usr/share/x11-server-sources/
./autogen.sh
./configure --with-fontrootdir=/usr/share/fonts --with-xkb-path=/usr/share/X11/xkb --with-xkb-output=/usr/share/X11/xkb/compiled --enable-dmx
make
Si vous n'obtenez aucune erreur, corrigez Xdmx (pour faire simple, il est "cassé" depuis un certain temps) :
ouvrir /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
et modifiez la ligne 730 : changez ceci :
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
à ça :
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
SI la ligne 730 est différente, utilisez cette section pour trouver la ligne correcte : Section d'origine - ligne à modifier marquée d'un *.
case ButtonPress:
case ButtonRelease:
detail = dmxGetButtonMapping(dmxLocal, detail);
valuator_mask_zero(&mask);
QueuePointerEvents(p, type, detail,
* POINTER_RELATIVE | POINTER_DESKTOP, &mask);
return;
Vérifiez votre version de Xdmx en exécutant ./configure --version
sur /usr/share/x11-server-source/
pour Xdmx 1.13 et plus anciennes, vous devez également effectuer ces modifications (pour les versions 1.14 et plus récentes, vous pouvez passer à l'étape "make" ci-dessous) :
ouvrir /usr/share/x11-server-sources/dix/getevents.c
, ligne 1395 : changer ceci :
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
A ceci :
if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) { /* valuators are in screen coords */
(Section originale - ligne à modifier marquée d'un *)
/* valuators are in driver-native format (rel or abs) */
if (flags & POINTER_ABSOLUTE) {
* if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
sx = valuator_mask_get(&mask, 0);
sy = valuator_mask_get(&mask, 1);
ouvrir /usr/share/x11-server-sources/Xext/xtest.c
, ligne 311 : changez ceci :
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
à ça :
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(section originale - ligne à modifier marquée d'un *)
case MotionNotify:
dev = PickPointer(client);
valuators[0] = ev->u.keyButtonPointer.rootX;
valuators[1] = ev->u.keyButtonPointer.rootY;
numValuators = 2;
firstValuator = 0;
if (ev->u.u.detail == xFalse)
* flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
break;
/usr/share/x11-server-sources/include/input.h
ligne 73 : Ajouter cette ligne après la ligne commençant par #define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
Après avoir effectué les changements ci-dessus, réexécutez (en /usr/share/x11-server-sources/
):
make
Vous devriez avoir un nouveau fichier Xdmx dans le répertoire /usr/share/x11-server-sources/hw/dmx/
. Nous devons l'installer globalement pour plus de facilité, je vous recommande donc de renommer votre fichier existant :
sudo mv /bin/Xdmx /bin/Xdmx-old
et copier le nouveau à sa place :
cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin
Maintenant que vous êtes prêt à faire votre premier essai, les commandes suivantes vous permettent de conserver votre affichage principal/existant ( :0
) en cours d'exécution et ouvrir un nouvel écran avec le support multi-moniteur. J'utilise icewm avec ces commandes pour le rendre un peu plus léger (j'utilise KDE sur mon affichage principal :0
et ouvrir n'importe quelle application à grand écran dans le nouvel écran à têtes multiples). Vous pouvez très certainement script ces commandes pour faciliter l'utilisation (c'est ce que j'ai fait) -- N'importe laquelle de ces commandes peut être exécutée sur la console et/ou la fenêtre du terminal de n'importe quel affichage, la seule exigence est qu'elles soient exécutées dans l'ordre.
Cette commande crée votre nouvel écran comme frame buffer pour votre écran VNC. :2
(ajustez la taille de l'écran comme vous le souhaitez) :
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
Ceci démarre une nouvelle session X légère sur votre écran physique comme affichage :1
(il existe différentes façons de procéder) :
startx 'icewm' -- :1
Cette commande démarre le multi-affichage entre votre écran physique et l'écran virtuel et lance icewm pour le gestionnaire de fenêtres :
Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm
Ouvrez maintenant une fenêtre de terminal et démarrez le serveur vnc (changez le mot de passe comme vous le souhaitez) :
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
La seule chose qui reste à faire maintenant est de lancer votre client VNC et de vous connecter à votre VNC -- vous devrez peut-être désactiver ou ajouter une exception à votre pare-feu. au port 5900 pour que tu puisses t'y connecter. Une autre chose à garder à l'esprit est que certains clients VNC n'affichent pas la position du curseur à distance, je certifie que "Mocha VNC" pour iOS fonctionne très bien si vous désactivez l'option "souris locale".
Profitez de la possibilité de faire glisser Windows entre votre moniteur principal et votre nouveau second moniteur virtuel (tout en ayant la possibilité d'utiliser la tablette pour cliquer ou taper sur des éléments dans le second moniteur).
Pour fermer Xdmx, appuyez sur Ctrl + Alt + Backspace deux fois.
Automatisation :
J'utilise ce bash script pour démarrer tout le processus (tue également Xvfb à la sortie) :
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print $1}' | xargs kill
Ensuite, j'ai un ~/.xinitrc
avec ceci :
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)
if [[ $1 == "" ]]
then
exec startkde
elif [[ $1 == "xterm" ]]
then
exec xterm
elif [[ $1 == "dual" ]]
then
exec Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm & x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe
else
exec $1
fi
Dépannage :
-
Lorsque vous exécutez Xdmx, si vous obtenez une erreur disant sh: /usr/local/bin/xkbcomp: No such file or directory
vous pouvez avoir besoin de faire l'exécution : cd /usr/local/bin" and "ln -s /bin/xkbcomp
puis réessayez Xdmx.
-
Ctrl + Alt + F1 par le biais de F7 est censé fonctionner dans Xdmx pour passer à d'autres consoles/xsessions mais pour une raison quelconque, cela ne fonctionne pas, ce que je fais est simplement d'exécuter sudo chvt X
(où X est un numéro de console/xsession) pour passer à mon affichage principal. De même, lorsque vous revenez à Xdmx, vous pouvez rencontrer des problèmes de dessin sur toutes les fenêtres ouvertes, je clique simplement sur la barre des tâches pour cacher/afficher la fenêtre à nouveau, ce qui force un nouveau dessin.