Жизнь - это компромисс

May 04, 2015 04:34

Итого:

удалось сделать "несбиваемый фокус" для 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.

wacom, баги, desktop linux, грабли, xorg, x-server

Previous post Next post
Up