Te instrukcje mają na celu utworzenie „dodatkowego” ekranu dla twojego komputera z systemem Linux za pomocą tabletu lub dowolnego komputera za pośrednictwem klienta VNC.
Te kroki zrobiłem w Mageia3 32Bit (nie próbowałem wersji 64-bitowej), ale powinny być podobne dla innych dystrybucji (np. Ubuntu).
Upewnij się, że masz wszystkie wymagane pakiety za pomocą następującego polecenia terminala:
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
Po uzyskaniu wszystkich powyższych pakietów uruchom następujące polecenia:
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
Jeśli nie dostaniesz żadnych błędów, załataj Xdmx (mówiąc najprościej, już od jakiegoś czasu był „zepsuty”):
otwórz /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
i zmień wiersz 730: zmień to:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
do tego:
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
JEŻELI linia 730 jest inna, użyj tej sekcji, aby znaleźć poprawną linię: Część oryginalna - linia do zmiany oznaczona *
case ButtonPress:
case ButtonRelease:
detail = dmxGetButtonMapping(dmxLocal, detail);
valuator_mask_zero(&mask);
QueuePointerEvents(p, type, detail,
* POINTER_RELATIVE | POINTER_DESKTOP, &mask);
return;
Sprawdź swoją wersję Xdmx uruchamiając ./configure --version
w /usr/share/x11-server-source/
, na Xdmx 1.13 i starszych trzeba także dokonać tych zmian (na 1.14 i nowsze można przejść do „zrobić” krok poniżej):
otwórz /usr/share/x11-server-sources/dix/getevents.c
, linia 1395: zmień to:
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
Do tego:
if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) { /* valuators are in screen coords */
(Część oryginalna - wiersz do zmiany oznaczony *)
/* 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);
otwórz /usr/share/x11-server-sources/Xext/xtest.c
, linia 311: zmień to:
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
do tego:
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(sekcja oryginalna - linia do zmiany oznaczona *)
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
, linia 73: Dodaj tę linię po linii zaczynającej się od #define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
Po wprowadzeniu powyższych zmian uruchom ponownie (w /usr/share/x11-server-sources/
):
make
Powinieneś mieć nowy plik Xdmx w /usr/share/x11-server-sources/hw/dmx/
. Musimy zainstalować to na całym świecie, więc zalecamy zmianę nazwy istniejącego:
sudo mv /bin/Xdmx /bin/Xdmx-old
i skopiuj nowy zamiast niego:
cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin
Teraz, gdy jesteś gotowy na pierwszą próbę, następujące polecenia pozwalają utrzymać główny / istniejący ekran ( :0
) i otworzyć nowy ekran z obsługą wielu monitorów. Używam icewm z tymi poleceniami, aby uczynić go nieco bardziej lekkim (używam KDE na głównym ekranie :0
i otwieram dowolną aplikację na wiele monitorów na nowym ekranie z wieloma głowicami). Zdecydowanie możesz napisać te polecenia w celu ułatwienia korzystania z nich (tak właśnie zrobiłem) - Każde z tych poleceń można wykonać w oknie konsoli i / lub terminalu dowolnego wyświetlacza, jedynym warunkiem jest wykonanie ich w kolejności.
To polecenie tworzy nowy ekran jako bufor ramki dla wyświetlacza VNC :2
(dostosuj rozmiar ekranu zgodnie z potrzebami):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
To rozpoczyna nową lekką sesję X na twoim fizycznym wyświetlaczu jako display :1
(istnieją różne sposoby, aby to zrobić):
startx 'icewm' -- :1
To polecenie uruchamia wyświetlanie wielu ekranów fizycznych i wirtualnych oraz uruchamia icewm dla menedżera okien:
Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm
Teraz otwórz okno terminala i uruchom serwer VNC (zmień hasło według potrzeb):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
Teraz pozostaje tylko odpalenie klienta VNC i połączenie się z VNC - może być konieczne wyłączenie lub dodanie wyjątku do zapory sieciowej do portu 5900, aby można było się z nią połączyć. Kolejną rzeczą do zapamiętania jest to, że niektórzy klienci VNC nie wyświetlają pozycji kursora zdalnego, zaświadczam, że „Mocha VNC” na iOS działa świetnie, jeśli wyłączysz opcję „mysz lokalna”.
Ciesz się przeciąganiem okien między głównym monitorem a nowym wirtualnym drugim monitorem (jednocześnie mając możliwość używania tabletu do klikania / pisania na rzeczach na drugim monitorze).
Aby zamknąć Xdmx, naciśnij dwukrotnie Ctrl+ Alt+ Backspace.
Automatyzacja:
Używam tego skryptu bash, aby rozpocząć cały proces (również zabija Xvfb przy wyjściu):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print $1}' | xargs kill
Następnie mam niestandardowy ~/.xinitrc
plik z tym:
#!/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
Rozwiązywanie problemów:
Podczas uruchamiania Xdmx, jeśli pojawi się błąd informujący sh: /usr/local/bin/xkbcomp: No such file or directory
o konieczności wykonania polecenia cd /usr/local/bin" and "ln -s /bin/xkbcomp
:, a następnie spróbuj ponownie Xdmx.
Ctrl+ Alt+ F1Przez F7ma pracować w Xdmx aby przełączyć się na inne konsole / xsessions ale z jakiegoś powodu nie działa, co zrobić, to po prostu wykonać sudo chvt X
(gdzie X jest konsola / liczba xsession), aby przełączyć do mojego głównego wyświetlacza. Również po przełączeniu z powrotem na Xdmx mogą pojawić się problemy z rysowaniem w dowolnym otwartym oknie, po prostu klikam pasek zadań, aby ukryć / pokazać okno ponownie, zmuszając do przerysowania.