Эти инструкции предназначены для создания «дополнительного» экрана для вашей 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);
IF линия 730 используется в этом разделе для поиска правильной строки:
Orginal section - строка для изменения, отмеченная *
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 и более поздней версии вы можете перейти к "make" шаг ниже):
открыть /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)
После внесения вышеуказанных изменений заново выполните (в /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 }' | xargs kill
Затем у меня есть пользовательский файл ~/.xinitrc
с этим:
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)
if [[ == "" ]]
then
exec startkde
elif [[ == "xterm" ]]
then
exec xterm
elif [[ == "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
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 для переключения на другие консоли / xsessions, но по какой-то причине это не работает, я просто выполняю sudo chvt X
(где X - номер консоли / xsession), чтобы переключиться на мой основной экран. Также, когда вы переключаетесь обратно на Xdmx, вы можете получить некоторые проблемы с рисунком в любых открытых окнах, я просто нажимаю на панель задач, чтобы скрыть / показать окно, снова заставляя перерисовать.