Итого:
удалось сделать "несбиваемый фокус" для mypaint.
При этом не удалось мыше запретить ходить на соседний экран. map-to-output не работает для relative устройств, а для keyboard просто роняет сервер (
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=784204).
Чем больше я пытаюсь фичи Xorg'а использовать практически, тем больше я убеждаюсь, что все эти замечательные абстракции, какие кажутся идеалистам издалека правильными и хорошими, на практике просто не работают, а создают проблемы для "простых сетапов".
Если бы оно при этом давало возможность делать адские клёвые вещи - да, ура. Тяжело, зато фичасто. Но ведь оно не фичасто! Я сегодня уже почти 12 часов занимаюсь тем, что выполняю пунктик из моего чеклиста "сделать независимый mypaint".
Изначально это была идея об двух screen'ах, каждый со своим input'ом. Не получилось - input'ы вешаются на layout. Вторая идея с двумя layout'ами оказалась ошибочной - их можно использовать только с несколькими картами.
Попытка завести вместе intel и nvidia в режиме multiseat закончилась эпик глюками и segfault'ом X'ов, когда я таки заставил их работать вместе.
Сдавшись и расставшись с идеей нескольких скринов, я сделал multipointer в типовом конфиге с xrandr'ом. Словил ещё один segfault, кое-как сделал MPX, который вместе с map-to-output для wacom'а сделал мне несбиваемый фокус, но при этом все второстепенные цели не достигнуты:
1) Редкоглючные игрушки стима всё так же будут пытаться расползтись по всем экранам.
2) gimp будет показывать диалоги иногда не на том мониторе, где его запустили.
3) nvidia'вский глюк с залипанием плееров и steam'а при включении/выключении второго монитора (см п1 - зачем оно нужно) будет сохраняться.
То есть достигнута программа-минимум. Заодно найдено хорошее место для скрипта инициализации:
/etc/lightdm/lightdm.conf:
session-setup-script=/usr/local/bin/configure_pointers.sh
Печально это. Вроде бы замечательная конструкция, а на деле - трухлявое всё.
UPD: Всё ещё больший epic fail. Mypaint рисует попапные диалоги по месту нахождения primary pointer'а. То есть мыши, которую я хочу юзать на другом экране. Другими словами, неюзабельная фича, и у меня есть подозрение, что set-cp для диалогов тоже работать не будет.
Другими словами, единственная "компромиссная" фича, которую я выцепил, всё равно не достаточно хорошо работает. Тьфу, да и только.
Залез в сырцы mypaint, понять насколько это всё плохо.
Цитирую:
d = Gtk.Dialog(title,
window,
Gtk.DialogFlags.MODAL,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
d.set_position(Gtk.WindowPosition.MOUSE)
Читаем про
Gtk.WindowPosition.MOUSE.
Так сказать, удачи патчить gtk.
Тьфу, да и только x2.