Queste istruzioni servono a creare una schermata "aggiuntiva" per la tua macchina Linux usando un tablet o qualsiasi computer tramite un client VNC.
Ho eseguito questi passaggi in Mageia3 32Bit (non ho provato 64 bit) ma dovrei essere simile anche per altre distro (ad esempio Ubuntu).
Assicurati di avere tutti i pacchetti richiesti con il seguente comando di terminale:
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
Una volta che hai tutti i pacchetti di cui sopra, emetti questi comandi:
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
Se non ricevi errori, applica Xdmx (in poche parole, è stato "rotto" per un po 'di tempo):
apri /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
e cambia linea 730:
cambia questo:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
a questo:
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
SE la linea 730 è diversa usa questa sezione per trovare la linea corretta:
Sezione originale - riga per cambiare contrassegnata con *
case ButtonPress:
case ButtonRelease:
detail = dmxGetButtonMapping(dmxLocal, detail);
valuator_mask_zero(&mask);
QueuePointerEvents(p, type, detail,
* POINTER_RELATIVE | POINTER_DESKTOP, &mask);
return;
Verifica la tua versione di Xdmx eseguendo ./configure --version
in /usr/share/x11-server-source/
, per Xdmx 1.13 e più vecchio devi anche apportare queste modifiche (per 1.14 e successivi puoi saltare al "make" passo sotto):
open /usr/share/x11-server-sources/dix/getevents.c
, riga 1395:
cambia questo:
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
A questo:
if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) { /* valuators are in screen coords */
(Sezione originale - riga da modificare contrassegnata con *)
/* 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);
open /usr/share/x11-server-sources/Xext/xtest.c
, riga 311:
cambia questo:
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
a questo:
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(sezione originale - riga per cambiare contrassegnato con *)
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
, riga 73:
Aggiungi questa riga dopo la riga che inizia con #define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
Dopo aver apportato le modifiche precedenti, riesegui (in /usr/share/x11-server-sources/
):
make
Dovresti avere un nuovo file Xdmx in /usr/share/x11-server-sources/hw/dmx/
. Dobbiamo installarlo a livello globale per comodità, quindi ti consiglio di rinominare quello esistente:
sudo mv /bin/Xdmx /bin/Xdmx-old
e copia quello nuovo al posto di esso:
cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin
Ora sei pronto per eseguire la tua prima prova, i seguenti comandi ti consentono di mantenere attivo il display principale / esistente ( :0
) e di aprire un nuovo display con il supporto multi-monitor.
Sto usando icewm con questi comandi per renderlo un po 'più leggero (io uso KDE sul mio display principale :0
e apro qualsiasi applicazione multi-monitor grande nel nuovo display multi-head).
Si può sicuramente scrivere questi comandi per facilitarne l'uso (è quello che ho fatto) - Qualsiasi di questi comandi può essere eseguito su console e / o finestra terminale di qualsiasi display, l'unico requisito è che vengano eseguiti nell'ordine.
Questo comando crea il tuo nuovo display come un frame buffer per il tuo display VNC :2
(regola le dimensioni dello schermo come desiderato):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
Questo avvia una nuova sessione X leggera sul display fisico come display :1
(ci sono diversi modi per farlo):
startx 'icewm' -- :1
Questo comando avvia il multi-display tra lo schermo fisico e lo schermo virtuale e avvia icewm per il window manager:
Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm
Ora apri una finestra di terminale e avvia il server di vnc (cambia password come desiderato):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
L'unica cosa che resta da fare ora è attivare il tuo client VNC e collegarti al tuo VNC - potresti dover disabilitare o aggiungere un'eccezione al tuo firewall alla porta 5900 per poterti connettere ad esso.
Un'altra cosa da tenere a mente è che alcuni client VNC non visualizzano la posizione del cursore remoto, certifico che "Mocha VNC" per iOS funziona alla grande se si disattiva l'opzione "mouse locale".
Divertiti a trascinare le finestre tra il monitor principale e il tuo nuovo secondo monitor virtuale (mentre puoi anche usare il tablet per fare clic / digitare su cose nel secondo monitor).
Per chiudere Xdmx premi Ctrl + Alt + Backspace due volte.
Automazione:
Uso questo script bash per avviare l'intero processo (uccide anche Xvfb all'uscita):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print }' | xargs kill
Allora ho un file ~/.xinitrc
personalizzato con questo:
#!/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
Risoluzione dei problemi:
-
Quando esegui Xdmx se ricevi un errore che dice sh: /usr/local/bin/xkbcomp: No such file or directory
potresti aver bisogno di eseguire exec: cd /usr/local/bin" and "ln -s /bin/xkbcomp
, quindi prova di nuovo Xdmx.
-
Ctrl + Alt + F1 attraverso F7 dovrebbe funzionare in Xdmx per passare a altre console / xsessioni ma per qualche motivo non funziona, quello che faccio è semplicemente eseguire sudo chvt X
(dove X è un numero console / xsession) per passare al mio display principale. Inoltre, quando torni a Xdmx potresti ottenere alcuni problemi di disegno su qualsiasi finestra aperta, faccio semplicemente clic sulla barra delle applicazioni per nascondere / mostrare nuovamente la finestra forzando un nuovo aggiornamento.