Queste istruzioni sono per creare una schermata "aggiuntiva" per la tua macchina linux usando un tablet o qualsiasi computer attraverso un client VNC.
Ho fatto questi passaggi in Mageia3 32Bit (non ho provato a 64 bit) ma dovrei essere simile anche per altre distro (cioè Ubuntu).
Assicurati di avere tutti i pacchetti richiesti con il seguente comando 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 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 si verificano errori, patch Xdmx (in poche parole, è stato "rotto" da un po 'di tempo):
apri /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
e cambia la riga 730: cambia questo:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
a questo:
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
Se la riga 730 è diversa utilizzare questa sezione per trovare la riga corretta: Sezione originale - riga da modificare contrassegnata con *
case ButtonPress:
case ButtonRelease:
detail = dmxGetButtonMapping(dmxLocal, detail);
valuator_mask_zero(&mask);
QueuePointerEvents(p, type, detail,
* POINTER_RELATIVE | POINTER_DESKTOP, &mask);
return;
Controlla la tua versione di Xdmx eseguendo ./configure --version
in /usr/share/x11-server-source/
, per Xdmx 1.13 e più si hanno anche per apportare queste modifiche (per 1.14 e più recenti si può passare al "fare" gradino sotto):
aperto /usr/share/x11-server-sources/dix/getevents.c
, linea 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);
aperto /usr/share/x11-server-sources/Xext/xtest.c
, linea 311: cambia questo:
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
a questo:
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(sezione originale - riga da modificare contrassegnata 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: aggiungere questa riga dopo la riga che inizia con #define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
Dopo aver apportato le modifiche sopra riportate, rieseguire (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 facilità, quindi ti consiglio di rinominare quello esistente:
sudo mv /bin/Xdmx /bin/Xdmx-old
e copia quello nuovo al suo posto:
cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin
Ora sei pronto per fare la tua prima prova, i seguenti comandi ti consentono di mantenere il tuo display principale / esistente ( :0
) in esecuzione e aprire un nuovo display con il supporto multi-monitor. Sto usando icewm con questi comandi per renderlo un po 'più leggero (uso KDE sul mio display principale :0
e apro qualsiasi applicazione multi-monitor nel nuovo display multi-head). Puoi sicuramente scriptare questi comandi per facilità d'uso (è quello che ho fatto) - Ognuno di questi comandi può essere eseguito su console e / o finestra terminale di qualsiasi display, l'unico requisito è che vengano eseguiti in ordine.
Questo comando crea il tuo nuovo display come frame buffer per il tuo display VNC :2
(regola le dimensioni dello schermo come desideri):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
Questo avvia una nuova sessione X leggera sul tuo display fisico come display :1
(ci sono diversi modi per farlo):
startx 'icewm' -- :1
Questo comando avvia la visualizzazione multipla tra lo schermo fisico e lo schermo virtuale e avvia icewm per il gestore di finestre:
Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm
Ora apri una finestra di terminale e avvia il server vnc (cambia la password come desiderato):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
L'unica cosa che resta da fare ora è accendere il client VNC e connettersi al VNC: potrebbe essere necessario disabilitare o aggiungere un'eccezione al firewall alla porta 5900 in modo da poter connettersi 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 tuo monitor principale e il tuo nuovo secondo monitor virtuale (mentre puoi anche usare il tablet per fare clic / digitare sulle cose nel secondo monitor).
Per chiudere Xdmx premere Ctrl+ Alt+ Backspacedue 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 $1}' | xargs kill
Quindi ho un ~/.xinitrc
file personalizzato con questo:
#!/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
Risoluzione dei problemi:
Quando si esegue Xdmx se si riceve un errore che dice sh: /usr/local/bin/xkbcomp: No such file or directory
che potrebbe essere necessario eseguire execute cd /usr/local/bin" and "ln -s /bin/xkbcomp
:, quindi riprovare Xdmx.
Ctrl+ Alt+ F1through F7dovrebbe funzionare in Xdmx per passare ad altre console / xsession 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 riscontrare alcuni problemi di disegno su qualsiasi finestra aperta, faccio semplicemente clic sulla barra delle applicazioni per nascondere / mostrare di nuovo la finestra forzando un ridisegno.