Estas instrucciones son para crear una pantalla "adicional" para su máquina Linux usando una tableta o cualquier computadora a través de un cliente VNC.
Hice estos pasos en Mageia3 32Bit (no he probado 64 bits) pero también debería ser similar para otras distribuciones (es decir, Ubuntu).
Asegúrese de tener todos los paquetes necesarios con el siguiente comando de 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
Una vez que tenga todos los paquetes anteriores, emita estos comandos:
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 no obtiene ningún error, aplique el parche Xdmx (simplemente, se ha "roto" por algún tiempo):
abrir /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
y cambiar la línea 730: cambie esto:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
a esto:
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
Si la línea 730 es diferente, use esta sección para encontrar la línea correcta: Sección original - línea para cambiar marcada con *
case ButtonPress:
case ButtonRelease:
detail = dmxGetButtonMapping(dmxLocal, detail);
valuator_mask_zero(&mask);
QueuePointerEvents(p, type, detail,
* POINTER_RELATIVE | POINTER_DESKTOP, &mask);
return;
Para comprobar la versión de Xdmx ejecutando ./configure --version
en /usr/share/x11-server-source/
, por Xdmx 1.13 y mayores también hay que hacer estos cambios (de 1.14 y posteriores se puede saltar a la "hacer" a continuación paso):
abierto /usr/share/x11-server-sources/dix/getevents.c
, línea 1395: cambie esto:
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
A esto:
if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) { /* valuators are in screen coords */
(Sección original - línea para cambiar marcada 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);
abierto /usr/share/x11-server-sources/Xext/xtest.c
, línea 311: cambie esto:
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
a esto:
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(sección original - línea para cambiar marcada 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
, línea 73: agregue esta línea después de la línea que comienza con #define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
Después de realizar los cambios anteriores, vuelva a ejecutar (en /usr/share/x11-server-sources/
):
make
Debería tener un nuevo archivo Xdmx en /usr/share/x11-server-sources/hw/dmx/
. Necesitamos instalarlo globalmente para facilitarlo, por lo que recomiendo cambiar el nombre de uno existente:
sudo mv /bin/Xdmx /bin/Xdmx-old
y copie el nuevo en su lugar:
cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin
Ahora que está listo para hacer su primera prueba, los siguientes comandos le permiten mantener su pantalla principal / existente ( :0
) en funcionamiento y abrir una nueva pantalla con el soporte de monitores múltiples. Estoy usando icewm con estos comandos para hacerlo un poco más liviano (uso KDE en mi pantalla principal :0
y abro cualquier aplicación grande de múltiples monitores en la nueva pantalla de múltiples cabezales). Definitivamente puede escribir estos comandos para facilitar su uso (es lo que hice): cualquiera de estos comandos se puede ejecutar en la consola y / o ventana de terminal de cualquier pantalla, el único requisito es que se ejecuten en orden.
Este comando crea su nueva pantalla como un búfer de cuadro para su pantalla VNC :2
(ajuste el tamaño de la pantalla como desee):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
Esto inicia una nueva sesión X ligera en su pantalla física como pantalla :1
(hay diferentes formas de hacer esto):
startx 'icewm' -- :1
Este comando inicia la visualización múltiple entre su pantalla física y la pantalla virtual e inicia icewm para el administrador de ventanas:
Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm
Ahora abra una ventana de terminal e inicie el servidor vnc (cambie la contraseña como desee):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
Lo único que queda por hacer ahora es iniciar su cliente VNC y conectarse a su VNC; es posible que deba deshabilitar o agregar una excepción a su firewall al puerto 5900 para poder conectarse a él. Otra cosa a tener en cuenta es que algunos clientes VNC no muestran la posición del cursor remoto, certifico que "Mocha VNC" para iOS funciona muy bien si desactiva la opción "mouse local".
Disfrute arrastrando ventanas entre su monitor principal y su nuevo segundo monitor virtual (al mismo tiempo que puede usar la tableta para hacer clic / escribir en cosas en el segundo monitor).
Para cerrar Xdmx presione Ctrl+ Alt+ Backspacedos veces.
Automatización:
Utilizo este script bash para comenzar todo el proceso (también mata Xvfb al salir):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print $1}' | xargs kill
Entonces tengo un ~/.xinitrc
archivo personalizado con esto:
#!/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
Solución de problemas:
Cuando ejecute Xdmx, si recibe un error sh: /usr/local/bin/xkbcomp: No such file or directory
que indica que es posible que deba ejecutar: cd /usr/local/bin" and "ln -s /bin/xkbcomp
e intente Xdmx nuevamente.
Ctrl+ Alt+ F1A través F7se supone que funciona en Xdmx para cambiar a otras consolas / xsessions pero por alguna razón no funciona, lo que hago es simplemente ejecutar sudo chvt X
(donde X es un número consola / xsession) para cambiar a mi pantalla principal. Además, cuando vuelva a cambiar a Xdmx, es posible que tenga algunos problemas de dibujo en cualquier ventana abierta, solo hago clic en la barra de tareas para ocultar / mostrar la ventana nuevamente y forzar un redibujo.