Эти инструкции предназначены для создания «дополнительного» экрана для вашей машины 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-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 отличается, используйте этот раздел, чтобы найти правильную строку: 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
in /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 и подключиться к нему - вам может потребоваться отключить или добавить исключение для брандмауэра для порта 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
, возможно, вам нужно выполнить execute:, а cd /usr/local/bin" and "ln -s /bin/xkbcomp
затем попробуйте снова Xdmx.
Ctrl+ Alt+ F1сквозной F7режим должен работать в Xdmx для переключения на другие консоли / xsessions, но по какой-то причине он не работает, я просто выполняю sudo chvt X
команду (где X - номер консоли / xsession), чтобы переключиться на мой основной дисплей. Также, когда вы переключаетесь обратно на Xdmx, вы можете столкнуться с некоторыми проблемами при рисовании в любых открытых окнах, я просто нажимаю на панели задач, чтобы скрыть / показать окно снова, вызывая перерисовку.