Estas instruções são para criar uma tela "adicional" para sua máquina linux usando um tablet ou qualquer computador através de um cliente VNC.
Eu fiz estes passos no Mageia3 32Bit (não tentei 64bits) mas deveria ser similar para outras distros também (isto é, Ubuntu).
Verifique se você tem todos os pacotes necessários com o seguinte comando do 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
Depois de ter todos os pacotes acima, emita estes 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
Se você não receber nenhum erro, remova o Xdmx (simplesmente, ele está "quebrado" há algum tempo):
abra /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
e altere a linha 730:
mude isto:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
para isso:
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
Se a linha 730 for diferente, use esta seção para encontrar a linha correta:
Seção original - linha a ser alterada com *
case ButtonPress:
case ButtonRelease:
detail = dmxGetButtonMapping(dmxLocal, detail);
valuator_mask_zero(&mask);
QueuePointerEvents(p, type, detail,
* POINTER_RELATIVE | POINTER_DESKTOP, &mask);
return;
Verifique sua versão do Xdmx executando ./configure --version
em /usr/share/x11-server-source/
, para Xdmx 1.13 e mais antigo você também precisará fazer essas alterações (para 1.14 e mais recente você pode pular para o "make" passo abaixo):
aberto /usr/share/x11-server-sources/dix/getevents.c
, linha 1395:
mude isto:
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
Para isso:
if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) { /* valuators are in screen coords */
(Seção original - linha a ser alterada com *)
/* 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);
aberto /usr/share/x11-server-sources/Xext/xtest.c
, linha 311:
mude isto:
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
para isso:
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(seção original - linha a ser alterada com *)
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
, linha 73:
Adicione esta linha após a linha que começa com #define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
Depois de fazer as alterações acima, execute novamente (em /usr/share/x11-server-sources/
):
make
Você deve ter um novo arquivo Xdmx em /usr/share/x11-server-sources/hw/dmx/
. Precisamos instalar isso globalmente para facilitar, por isso recomendo renomear a existente:
sudo mv /bin/Xdmx /bin/Xdmx-old
e copie o novo no lugar dele:
cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin
Agora você está pronto para fazer sua primeira avaliação, os comandos a seguir permitem que você mantenha sua exibição principal / existente em execução ( :0
) e abra uma nova exibição com o suporte a vários monitores.
Eu estou usando o icewm com esses comandos para torná-lo um pouco mais leve (eu uso o KDE no meu monitor principal :0
e abro qualquer aplicativo de vários monitores grandes no novo monitor com várias cabeças).
Você pode roteirizar definitivamente estes comandos para facilidade de uso (é o que eu fiz) - Qualquer um desses comandos pode ser executado em console e / ou janela de terminal de qualquer display, o único requisito é que eles sejam executados em ordem.
Este comando cria sua nova exibição como um buffer de quadros para sua exibição VNC :2
(ajuste o tamanho da tela conforme desejado):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
Isso inicia uma nova sessão X leve em sua exibição física como exibição :1
(existem diferentes maneiras de fazer isso):
startx 'icewm' -- :1
Este comando inicia a exibição múltipla entre sua tela física e a tela virtual e inicia o icewm para o gerenciador de janelas:
Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm
Agora abra uma janela de terminal e inicie o servidor vnc (altere a senha conforme desejado):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
A única coisa que resta fazer agora é acionar seu cliente VNC e conectar-se ao seu VNC - você pode precisar desabilitar ou adicionar uma exceção ao seu firewall à porta 5900 para que você possa se conectar para isso.
Outra coisa a ter em mente é que alguns clientes VNC não exibem a posição do cursor remoto, certifico que o "Mocha VNC" para iOS funciona muito bem se você desativar a opção "mouse local".
Desfrute de arrastar janelas entre o monitor principal e o segundo monitor virtual (além de poder usar o tablet para clicar / digitar em coisas no segundo monitor).
Para fechar o Xdmx pressione Ctrl + Alt + Backspace duas vezes.
Automação:
Eu uso este script bash para iniciar todo o processo (também mata o Xvfb ao sair):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print $1}' | xargs kill
Então eu tenho um arquivo ~/.xinitrc
personalizado com isto:
#!/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
Solução de problemas:
-
Ao executar o Xdmx se você receber um erro dizendo sh: /usr/local/bin/xkbcomp: No such file or directory
, talvez seja necessário executar: cd /usr/local/bin" and "ln -s /bin/xkbcomp
e, em seguida, tente Xdmx novamente.
-
Ctrl + Alt + F1 a F7 deve funcionar no Xdmx para mudar para outros consoles / xsessions mas, por alguma razão, isso não funciona, o que eu faço é simplesmente executar sudo chvt X
(onde X é um número console / xsession) para mudar para o meu display principal. Além disso, quando você voltar para o Xdmx, você pode obter alguns problemas de desenho em qualquer janela aberta, basta clicar na barra de tarefas para ocultar / mostrar a janela novamente forçando um redesenho.