Индикатор раскладки и блокировки рабочего стола

Ещё летом сделал одну штучку, которая оказалось очень удобной – физический индикатор раскладки и статуса блокировки рабочего стола. Вариант для ленивых, минимальная версия не требует вообще ничего кроме отвёртки.

Для чего это нужно – на работе обязательно блокировать рабочий стол когда отходишь, так же я почти всегда блокирую дома, просто что бы киска по клаве не прошла и не понажимала чего. Когда отошёл от компа на какое-то время, мониторы засыпают и непонятно, заблокирован ли рабочий стол. Нужно подергать мышку, подождать и всё такое. Аналогично с раскладкой, вслепую иногда можно много напечатать, пока не заметишь что что-то не так (а решения типа punto switcher я не люблю). Переключение раскладки у меня одной кнопкой – CapsLock.

Традиционно в Linux для индикации используются лампочки на клавиатуре – Num Lock, Caps Lock и Scroll lock. Это работает и не требует ничего кроме конфигов, но решение не сказать что удобное – боковым зрением не видно всё равно, как правило светодиоды одного цвета, а на некоторых клавах вообще надо чуть ли в зад заглядывать, что бы увидеть.

Поэтому делаем вот что – берём залитую пивом клаву и дербаним, достаём плату управления и просто вешаем её где удобно (например под основной монитор). Решение очень простое и уже работает.

Я из блочка клавиатуры перепаял диоды на разный цвет, что-бы боковым зрением видеть. У меня сделано так – зелёный (Num Lock) – это Num Lock, синий (Caps lock) – включен русский язык, красный (Scroll lock) – десктоп заблокирован.

Так же небольшая автоматизация всего этого. Русская раскладка (если включена) отключается, если блокируешь рабочий стол, так же отключается автоматически при вызове главного меню i3.

Таким образом, подошёл к компу, у которого уснули мониторы и можно сразу понять – если горит красная лампочка, можно сразу вводить пароль и жать Enter, как сделаешь, то они как раз проснутся. А боковым зрением видно, не включена ли русская раскладка (при блокировке мне это не нужно, т.к. отключается всё равно автоматически).

Думаю вот как-то этот индикатор переоформить, он у меня просто на столе валяется, я даже поленился его на монитор приклеить. Надо корпус красивый или что-то более прикольное (у меня есть одна идейка, но наверное сделаю не скоро).

Конфиги

У меня используется среда i3, поэтому всё очень просто сделать скриптами.

Занятно, что у X11 нет штатного API для выбора раскладки, поэтому использую xkb-switch. Он просто вызывается в скриптах блокировки и вызова d-menu для сброса раскладки на US:

#!/bin/bash
# Reset current layout to US
# to allow promt be always-correct
xkb-switch -s 'us'
rofi -show combi

Я использую rofi для функции d-menu, аналогично с блокировкой:

#!/bin/bash
# Reset current layout to US
# to allow password be always-correct
xkb-switch -s 'us'
# Set Scroll lock to ON
# To indicate that we are locked (when display is sleeping)
xset led 3
i3lock --nofork
# Unlock done, make OFF scroll lock
xset -led 3

Включаем CapsLock, блокируемся (то есть запускаем i3-lock), ждём выхода (что значит разблокировались) – выключаем. Всё просто.

Обратите внимание, что по-умолчанию X11 xset led не даст переключать все лампочки, надо почистить немного конфиг /usr/share/X11/xkb/compat/ledcaps:

default partial xkb_compatibility "caps_lock" {
    indicator "Caps Lock" {
        whichModState= Locked;
        modifiers= Lock;
    };
};
partial xkb_compatibility "group_lock" {
    indicator "Caps Lock" {
        modifiers= None;
        groups=All-group1;
    };
};
partial xkb_compatibility "shift_lock" {
    indicator "Caps Lock" {
        whichModState= Locked;
        modifiers= Shift;
    };
};

Теперь все наши скрипты замечательно работают. Код. как обычно, можно найти на моём Github.

One thought on “Индикатор раскладки и блокировки рабочего стола

Leave a Reply

Your email address will not be published. Required fields are marked *