Временным решением стал ярлык на рабочих столах, но это неудобно. Одним из последующих решений стало выполнение setxkbmap при выходе компа из спящего режима. Чтобы отловить события в системе до и после засыпания на диск, я запустил dbus-monitor и выполнил цикл засыпания/пробуждения.
$ dbus-monitor --system | tee ~/tmp/dbus-system.log
В процессе изучения полученного лога нашлись записи от UPower (подсистема управления питанием).
$ grep UPower ~/tmp/dbus-monitor.log signal sender=:1.15 -> dest=(null destination) serial=80 path=/org/freedesktop/UPower; interface=org.freedesktop.UPower; member=Sleeping signal sender=:1.15 -> dest=(null destination) serial=81 path=/org/freedesktop/UPower; interface=org.freedesktop.UPower; member=Resuming
Чтобы восстановить настройки клавиатуры, достаточно отловить событие 'Resuming' от UPower и выполнить команду setxkbmap $(cat ~/.Xkbmap). Готовый скрипт можно взять тут.
Позже всплыл баг, когда при одновременной работе двух пользователей настройки восстанавливаются только у пользователя, у которого активна сессия на момент пробуждения. В виде хака добавил прослушивание событий и от ConsoleKit.
Есть еще много мест которые можно улучшить, но это уже буду делать по-мере появления свободного времени. А возможно просто забъю на per-user настройки клавиатуры и просто сделаю на уровне системных настроек. По-идее с ними проблем быть не должно.
Комментариев нет:
Отправить комментарий