Ces instructions permettent de créer un écran "supplémentaire" pour votre machine Linux en utilisant une tablette ou un ordinateur via un client VNC.
J'ai fait ces étapes dans Mageia3 32Bit (je n'ai pas essayé le 64bit) mais devrait être similaire pour les autres distributions (c'est-à-dire Ubuntu).
Assurez-vous d’avoir tous les packages requis avec la commande de terminal suivante:
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 (en termes simples, il a été "cassé" pendant un certain temps):
ouvrez /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
et changez de ligne 730:
changez ceci:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
à ceci:
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
SI la ligne 730 est différente, utilisez cette section pour trouver la ligne correcte:
Section Orginal - ligne à modifier marquée avec *
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
in /usr/share/x11-server-source/
, pour Xdmx 1.13 , vous devez également apporter ces modifications (pour 1.14 et versions ultérieures, vous pouvez passer directement à "make"). étape ci-dessous):
ouvrir /usr/share/x11-server-sources/dix/getevents.c
, ligne 1395:
changez ceci:
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
À ceci:
if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) { /* valuators are in screen coords */
(section originale - ligne à modifier marquée avec *)
/* 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;
à ceci:
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(section originale - ligne à modifier marquée avec *)
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:
Ajoutez cette ligne après la ligne commençant par #define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
Après avoir apporté les modifications ci-dessus, ré-exécutez (dans /usr/share/x11-server-sources/
):
make
Vous devriez avoir un nouveau fichier Xdmx dans /usr/share/x11-server-sources/hw/dmx/
. Nous devons l'installer globalement pour plus de facilité, alors je vous recommande de renommer votre existant:
sudo mv /bin/Xdmx /bin/Xdmx-old
et copiez le nouveau à la 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 d'ouvrir un nouvel affichage avec le support multi-écrans.
J'utilise icewm avec ces commandes pour le rendre un peu plus léger (j'utilise KDE sur mon affichage principal :0
et j'ouvre toute application multi-moniteurs dans le nouvel écran multi-têtes).
Vous pouvez très certainement écrire ces commandes pour en faciliter l’utilisation (c’est ce que j’ai fait) - Chacune de ces commandes peut être exécutée sur la console et / ou la fenêtre de terminal de n’importe quel écran, la seule condition est qu’elles soient exécutées dans l’ordre. p>
Cette commande crée votre nouvel affichage en tant que tampon d'image pour votre affichage VNC :2
(ajustez la taille de l'écran comme vous le souhaitez):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
Cela démarre une nouvelle session X légère sur votre affichage physique en affichant :1
(il existe différentes manières de le faire):
startx 'icewm' -- :1
Cette commande lance 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 (modifiez le mot de passe comme vous le souhaitez):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
Il ne vous reste plus qu'à lancer votre client VNC et à vous connecter à votre VNC - vous devrez peut-être désactiver ou ajouter une exception à votre pare-feu au port 5900 pour pouvoir vous connecter à elle.
Une autre chose à garder à l'esprit est que certains clients VNC n'affichent pas la position du curseur distant, je certifie que "Mocha VNC" pour iOS fonctionne très bien si vous désactivez l'option "souris locale".
Faites glisser les fenêtres entre votre moniteur principal et votre nouveau deuxième moniteur virtuel (tout en utilisant la tablette pour cliquer / taper sur le second moniteur).
Pour fermer Xdmx, appuyez sur Ctrl + Alt + Retour arrière deux fois.
Automation:
J'utilise ce script bash pour lancer tout le processus (tue également Xvfb à la sortie):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print }' | xargs kill
Ensuite, j'ai un fichier ~/.xinitrc
personnalisé avec ceci:
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)
if [[ == "" ]]
then
exec startkde
elif [[ == "xterm" ]]
then
exec xterm
elif [[ == "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
fi
Dépannage:
-
Lorsque vous exécutez Xdmx si vous obtenez une erreur indiquant sh: /usr/local/bin/xkbcomp: No such file or directory
, vous devrez peut-être exécuter: cd /usr/local/bin" and "ln -s /bin/xkbcomp
, puis essayez à nouveau Xdmx.
-
Ctrl + Alt + F1 à F7 est supposé fonctionner dans Xdmx pour passer à 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 écran principal. De plus, lorsque vous revenez à Xdmx, vous risquez de rencontrer des problèmes de dessin sur toutes les fenêtres ouvertes. Il suffit de cliquer sur la barre des tâches pour masquer / afficher la fenêtre, ce qui oblige à redessiner.