Ці інструкції полягають у створенні "додаткового" екрана для вашої машини Linux за допомогою планшетного ПК або будь-якого комп'ютера через клієнт VNC.
Я зробив ці кроки в Mageia3 32Bit (не пробував 64-бітний), але повинен бути подібний і для інших дистрибутивів (тобто Ubuntu).
Переконайтеся, що у вас є всі необхідні пакети із наступною командою терміналу:
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
Щойно у вас є всі перераховані вище пакети, видайте ці команди:
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
Якщо ви не отримаєте жодних помилок, патч Xdmx (просто кажучи, він "ламався" протягом деякого часу:
відкрити /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
та змінити рядок 730: змінити:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
до цього:
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
Якщо рядок 730 відрізняється, використовуйте цей розділ, щоб знайти правильний рядок: Оригінальний розділ - рядок, щоб змінити позначку *
case ButtonPress:
case ButtonRelease:
detail = dmxGetButtonMapping(dmxLocal, detail);
valuator_mask_zero(&mask);
QueuePointerEvents(p, type, detail,
* POINTER_RELATIVE | POINTER_DESKTOP, &mask);
return;
Перевірте свою версію Xdmx, запустивши ./configure --version
в програму /usr/share/x11-server-source/
, для Xdmx 1.13 і старших також потрібно внести ці зміни (для 1.14 і новіших ви можете перейти до кроку "зробити" нижче):
відкрити /usr/share/x11-server-sources/dix/getevents.c
, рядок 1395: змінити:
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
До цього:
if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) { /* valuators are in screen coords */
(Оригінальний розділ - рядок для зміни, позначеного *)
/* 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);
відкрити /usr/share/x11-server-sources/Xext/xtest.c
, рядок 311: змінити:
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
до цього:
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(оригінальний розділ - рядок для зміни, позначеного *)
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
, рядок 73: Додайте цей рядок після рядка, що починається з #define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
Після внесення вищезазначених змін повторно виконайте (in /usr/share/x11-server-sources/
):
make
У вас повинен бути новий файл Xdmx /usr/share/x11-server-sources/hw/dmx/
. Нам потрібно встановити це глобально для зручності, тому рекомендую перейменувати існуючий:
sudo mv /bin/Xdmx /bin/Xdmx-old
і скопіюйте його замість нього:
cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin
Тепер ви готові провести першу пробну версію, наступні команди дозволяють вам підтримувати основний / існуючий дисплей ( :0
) та відкривати новий дисплей із підтримкою мультимонітора. Я використовую Icewm з цими командами, щоб зробити його трохи легшим (я використовую KDE на головному дисплеї :0
та відкриваю будь-яку програму великих моніторів у новому багатоголовковому дисплеї). Ви можете, безумовно, скриптувати ці команди для зручності використання (це я і зробив) - Будь-яка з цих команд може бути виконана на консольному та / або термінальному вікні будь-якого дисплея, єдина вимога - вони виконуються в порядку.
Ця команда створює ваш новий дисплей як буфер кадру для вашого дисплея VNC :2
(регулюйте розмір екрана за бажанням):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
Починається новий легкий сеанс X на фізичному дисплеї як дисплей :1
(для цього є різні способи):
startx 'icewm' -- :1
Ця команда запускає багатоекранне відображення між вашим фізичним та віртуальним екраном та запускає icewm для менеджера вікон:
Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm
Тепер відкрийте вікно терміналу і запустіть сервер vnc (змінити пароль за бажанням):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
Єдине, що вам залишається зробити - це запустити клієнт VNC та підключитися до VNC - можливо, вам доведеться відключити або додати виняток до брандмауера до порту 5900, щоб ви могли підключитися до нього. Ще одна річ, яку слід пам’ятати, - це те, що деякі клієнти VNC не відображають положення віддаленого курсору, я підтверджую, що «Mocha VNC» для iOS чудово працює, якщо вимкніть опцію «локальна миша».
Насолоджуйтесь перетягуванням вікон між вашим головним монітором та новим віртуальним другим монітором (при цьому також зможете користуватися планшетом для клацання / набору речей на другому моніторі).
Щоб закрити Xdmx, натисніть Ctrl+ Alt+ Backspaceдвічі.
Автоматизація:
Я використовую цей скрипт bash для запуску всього процесу (також вбиває Xvfb при виході):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print $1}' | xargs kill
Тоді у мене є власний ~/.xinitrc
файл із цим:
#!/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
Вирішення проблем:
Якщо ви запускаєте Xdmx, якщо у вас з’явилася помилка, сказати, що sh: /usr/local/bin/xkbcomp: No such file or directory
вам може знадобитися виконати:, cd /usr/local/bin" and "ln -s /bin/xkbcomp
спробуйте ще раз Xdmx.
Ctrl+ Alt+ F1через F7повинен працювати в Xdmx для переходу на інші консолі / xsesions, але чомусь це не працює, я це просто виконувати sudo chvt X
(де X - номер консолі / xsession), щоб перейти на головний дисплей. Крім того, коли ви перейдете на Xdmx, у вас можуть виникнути проблеми з малюванням на будь-яких відкритих вікнах, я просто натискаю на панель завдань, щоб приховати / показати вікно ще раз, примушуючи перемальовувати.