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)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.