Ces instructions permettent de créer un écran "supplémentaire" pour votre machine Linux à l'aide d'une tablette ou de tout ordinateur via un client VNC.
J'ai fait ces étapes dans Mageia3 32Bit (je n'ai pas essayé de 64 bits) mais je devrais être similaire pour les autres distributions (par exemple, Ubuntu).
Assurez-vous de disposer de 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 packages ci-dessus, lancez les commandes suivantes:
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 (tout simplement, il est "cassé" depuis un certain temps):
ouvrez /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
et changez la ligne 730: changez ceci:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
pour ç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 indiquée par *
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
dans /usr/share/x11-server-source/
, pour Xdmx 1,13 et plus vous devez aussi faire ces changements (pour 1.14 et plus récente , vous pouvez passer à la « faire » étape ci - dessous):
open /usr/share/x11-server-sources/dix/getevents.c
, line 1395: changez ceci:
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
Pour ça:
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);
ouvert /usr/share/x11-server-sources/Xext/xtest.c
, ligne 311: changez ceci:
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
pour ça:
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: Ajouter 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é, je vous recommande donc de renommer votre nom actuel:
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 garder votre affichage principal / existant en :0
cours d'exécution et d'ouvrir un nouvel affichage avec le support multi-moniteur. J'utilise icewm avec ces commandes pour le rendre un peu plus léger (j'utilise KDE sur mon écran principal :0
et ouvre n'importe quelle application multi-moniteur de grande taille sur le nouvel écran multi-têtes). Vous pouvez très certainement écrire ces commandes pour faciliter leur 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 condition requise est qu'elles soient exécutées dans l'ordre.
Cette commande crée votre nouvel affichage en tant que tampon d'image pour votre affichage VNC :2
(ajustez la taille de l'écran à votre guise):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
Cela démarre une nouvelle session X légère sur votre affichage physique en affichage :1
(il existe différentes façons de le faire):
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 à votre guise):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
Il ne reste plus qu’à allumer votre client VNC et à vous connecter à votre VNC - vous devrez peut-être désactiver ou ajouter une exception à votre pare-feu pour le port 5900 afin que vous puissiez vous y connecter. 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 parfaitement si vous désactivez l'option "souris locale".
Amusez-vous à faire glisser des fenêtres entre votre moniteur principal et votre nouveau second moniteur virtuel (tout en pouvant utiliser la tablette pour cliquer / taper sur des éléments du second moniteur).
Pour fermer Xdmx, appuyez deux fois sur Ctrl+ Alt+ Backspace.
Automatisation:
J'utilise ce script bash pour démarrer l'ensemble du 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
fichier personnalisé 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 indiquant sh: /usr/local/bin/xkbcomp: No such file or directory
que vous devrez peut-être exécuter cd /usr/local/bin" and "ln -s /bin/xkbcomp
:, essayez à nouveau Xdmx.
Ctrl+ Alt+ F1through F7est supposé fonctionner dans Xdmx pour basculer vers d'autres consoles / xsessions, mais pour une raison quelconque, cela ne fonctionne pas. Ce que je fais est simplement exécuter sudo chvt X
(X étant un numéro de console / xsession) pour basculer vers mon écran principal. De plus, 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 masquer / afficher à nouveau la fenêtre, ce qui force à le redessiner.