Эти инструкции предназначены для создания "дополнительного" экрана для вашей машины Linux с помощью планшета или любого компьютера через VNC-клиент.
Я сделал эти шаги в Mageia3 32Bit (не пробовал 64bit), но они должны быть аналогичны и для других дистрибутивов (например, 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-dmxmake
Если вы не получаете никаких ошибок, исправьте 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)
После внесения вышеуказанных изменений выполните повторное выполнение (в /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 &
Это запускает новый сеанс lightweight 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 -- :1ps | 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 xtermelif [[ $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 -nowireframeelse exec $1fi
Диагностика:
При запуске 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, у вас могут возникнуть некоторые проблемы с рисованием в любых открытых окнах, я просто нажимаю на панель задач, чтобы снова скрыть / показать окно, заставляя перерисовывать.