Это может быть только частичное решение (я, честно говоря, не знаю, как оно реагирует на отключение / повторное подключение клавиатуры), но поскольку у вас уже есть скрипт, который делает то, что вы хотите, это может быть достаточно близко.
При запуске X11 выполняет несколько специальных программ, если они присутствуют в системе. Для наших целей наиболее интересным является ~/.xsession, который выполняется после того, как вы вошли в систему с помощью диспетчера отображения, что в наши дни является обычной настройкой для графической среды. (Раньше вы обычно входили в оболочку и затем запускали команду startx
для запуска X; если это так, вы использовали ~/.xinitrc для той же цели.)
Мы можем использовать это для выполнения команд практически независимо от того, какой менеджер дисплея (gdm, gdm3, kdm, ...) и окружение рабочего стола (GNOME, Xfce, KDE, ...) вы используете.
- Создайте файл с именем
.xsession
и поместите его в свой домашний каталог.
- Добавьте к этому следующее:
#!/bin/bash
/usr/bin/setxkbmap -option "ctrl:nocaps"
- Сохраните и установите файл в режим 755 (
chmod 755 ~/.xsession
)
- Выйдите и снова включите или перезагрузите
Это должно установить вашу раскладку клавиатуры при входе в систему. Он также должен выполняться достаточно поздно, чтобы setxkbmap действительно работал.
Если по какой-либо причине это не работает, войдите в текстовый терминал (Ctrl+Alt+F2 для любого F2 в [F1 ..F6] должен быть вашим другом) и удалите файл, введя команду rm ~/.xsession
.
Для справки, вот моя ~/.xsession, которая с режимом 755 переводит меня в сеанс Xfce4 (это может служить примером "заведомо удачного"):
#!/bin/sh
xscreensaver &
exec xfce4-session
Директива exec
в конце заменяет сам скрипт на данную команду. Все, что не выходит более или менее немедленно, должно быть задокументировано, следовательно, &
. (Я ожидаю, что setxkbmap выйдет почти сразу, поэтому не требует его фоновой обработки).