LINUX.ORG.RU

Дублирование ввода с клавиатуры и мыши на нескольких окнах

 , , ,


0

1

Опишу юзкейс: есть пара ридеров, каждый открыт на половину экрана, требуется синхронизировать пользовательский ввод (типа скролла мышью) на обоих окнах.

Сам пользуюсь openbox, который на такое самостоятельно не способен, хотелось бы какой-нибудь скрипт/утилиту, которая может такое провернуть.

P.S. Нагуглил Multi-pointer X, но не удается присвоить два master'а одному slave.

★★

Последнее исправление: Karthago (всего исправлений: 1)

Вот есть быстрая мысль.

1. Запустить в качестве дисплея :1 Xephyr (вложенный X-сервер), расположив его средствами openbox в одной половине экрана, и запустить в нем сразу на весь экран твой ридер.

2. В другой половине экрана (это дисплей :0) открыть другой ридер.

3. Настроить x2x с дисплея :0 на дисплей :1

Я не пробовал и не знаю, что получится.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 3)

Не, с x2x может не получиться. То есть он, конечно, управляет вторым сервером, но вот на том сервере, с которого идет управление, печатать и мышкой крутить в приложении не может. Сообщения просто до приложения доходить не будут - x2x все перехватывает раньше. Хотя есть опция -shadow. Надо побаловаться.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Типичный иксоизврат. Проще читать события ввода напрямую из /dev/input/* и передавать программам.

anonymous
()
Ответ на: комментарий от anonymous

Любые трахи с написанием программ автора явно не устраивают. Написать такую программу можно. Есть XTEST Extension, которое может создавать фейковые события клавиатуры мыши в любом месте.

Zubok ★★★★★
()

P.S. Нагуглил Multi-pointer X, но не удается присвоить два master'а одному slave.

Что касается Multi-pointer X. Создать мастер новый можно. Можно также задать ему transformation matrix, чтобы сдвинуть его по горизонтали. Но вот как заставить оба курсора работать от одного физического устройства, я пока не знаю. И можно ли?

Zubok ★★★★★
()

Весь ввод читается из одних и тех же файлов, положение окон разное, фокус иксы не умеют сразу в два клиента, так что вряд ли.

r3lgar ★★★★★
()

а нельзя эти твои ридеры (чтобы это не значило) в консольке открыть? например в vim?
тогда можно сделать tty snooping

system-root ★★★★★
()
Ответ на: комментарий от Zubok

Но вот как заставить оба курсора работать от одного физического устройства

Подозреваю, что никак. reattach физического устройства другому мастеру автоматически сбрасывает предыдущего.

Karthago ★★
() автор топика

xdootool в руки. Не совсем то, что надо, но параллельную прокрутку окон накостылить можно, хоть и через пятую точку.

mogwai ★★★★★
()
Ответ на: комментарий от Karthago

А написать какую-нибудь обертку на баше реально? Если да, то куда копать?

Нет, на баше нельзя. Такую программку надо на языке писать, который имеет биндинг к Xlib или XCB, Просто готовой такой нет. Однако вот что у меня получилось с x2x. 1. Запускаем два вложенных сервера Xephyr с твоей программой. Показываю упрощенно по командам, чтобы было понятно.

$ ставим Xephyr
$ Xephyr :1
$ Xephyr :2
$ DISPLAY=:1 your_program
$ DISPLAY=:2 your_program

2. Дальше запускаем x2x

$ ставим x2x (малюсенькая)
$ x2x -from :0 -to :1 -shadow :2

На экране появится маленькое окно с цифрой :1. Кликаешь в него. А дальше в программе на сервере :1 начинаешь печатать и выделять. Автоматом все то же самое будет происходить на сервере :2.

Это пока все, что я смог достичь.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Хотя нет. Фигня. С мышкой немного фигня. Она управляется только из белого окна на :0. В терминале работает ок выделение, но если графическую запустить, то фигня получается. Может, можно как-то исправить. Надо подумать. Но без писанины на сишечке (или чем-нибудь другом) я другого варианта пока не вижу. Ну, если только внезапно не обнаружится какая-нибудь неизвестная программа, которая это делает.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)

Еще есть вариант, но перспектива туманна. Попробовать создать как бы виртуальное устройство (мышь, клавиатура), полностью дублирующее реальные. Тогда в системе будет как бы две мышки, две клавиатуры. И попробовать привязать это дело к разным master. Есть специальное устройство в Linux — /dev/uinput, которое позволяет от пользователя создавать виртуальные устройства ввода, которые, как я полагаю, должны в xinput появиться как slave. Вот, к слову, есть такая программа, которая клонирует устройства ввода через uinput:

http://hetgrotebos.org/wiki/uinput-mapper

uinput-mapper is a program that can clone and remap (in clones) input devices to other (newly created) input devices (locally or over the network). It also offers a nice API to both the /dev/input/* and /dev/uinput devices in Python.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Только клавиатура — уже неплохо. Надо будет попробовать.

Karthago ★★
() автор топика
Ответ на: комментарий от Karthago

Еще глянь python-libevdev и python-evdev и python-libinput

Вот в аннотации написано:

python-libevdev is a wrapper around the libevdev C library, with a pythonic API. libevdev makes it easy to

• read and parse events from an input device

• create a virtual input device and make it send events

• duplicate an existing device and modify the event stream

See the Basic examples section below for simple code or the Examples page for more detailed examples.

python-llibevdev написал Peter Hutterer - основной разрабочик системы ввода в иксах и libinput.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.