Это, конечно, здорово, что каждый композитор реализует по-своему (и тем самым ограничивает) настройки ввода, как ему пожелается, но рассмотрим именно KWin. В частности, меня интересует настройка графического планшета, а именно - переключение между несколькими профилями.
Имеем plasma-desktop/kcms/tablet, который не умеет в профили (в отличие от своего X11-прародителя, кстати) и ручное задание значений inputArea (как вообще можно было додуматься сделать полноценный мышиный редактор области, но при этом не дать возможность вбить нужные значения с клавиатуры?!). Некоторое время кое-как выставлял область мышкой, но что-то достало.
На коленке функционал профилей можно реализовать через скрипт, который бы менял какой-то конфигурационный файл и применял бы настройки в KWin. Здорово, есть kwriteconfig6, которым можно переписывать ~/.config/kcminputrc, где и хранятся нужные мне настройки. Но применить их никак без перезапуска.
В дело вступает D-Bus. Исследую дерево, которое выдаёт qdbus6 по команде
получаю хренову тучу настроек, среди них ищу
qdbus6 org.kde.KWin | grep -i input
Заранее посмотрел, какой event* отвечает за перо графического планшета - event21. Делаю
qdbus6 \
org.kde.KWin \
/org/kde/KWin/InputDevice/event21 \
org.freedesktop.DBus.Properties.Get \
org.kde.KWin.InputDevice \
inputArea
на что получаю
qdbus: I don't know how to display an argument of type '(dddd)', run with --literal.
C --literal получаю
[Variant: [Argument: (dddd) 0.33137, 0.340447, 0.337261, 0.339013]]
По значениям видно, как я отчаянно пытался мышкой на микроскопическом клочке монитора выставить значения 0.33, 0.33, 0.33, 0.33.
Теперь прикол: получить-то я получил, а вот отправить составной тип (в реальности это QRectF, aka структура из четырёх double) с нужными данными в терминале через dbus-send/qdbus нельзя (если убедите меня в обратном, буду премного благодарен).
Получаем два стула (чтобы сделать возможным хотя бы выставлять вручную нужные размеры и положение области):
-
доделывать KCM (читай на Qt Quick патчить формочку, добавлять обработчики, собирать, тестить и потом ждать, пока примут PR);
-
делать консольную утилиту, дублирующую функционал KCM на Си, Плюсах или Питоне (просто чтобы использовать API D-Bus для отправки непримитивных типов); да-да, xsetwacom, который будет работать только с KWin.
Есть ещё варианты кроме использования X11?