Страницы

Поиск по вопросам

четверг, 29 ноября 2018 г.

Ubuntu. Запуск скрипта при блокировке экрана по Ctrl+Alt+L

Возможно ли прикрутить скрипт в дополнение к горячим клавишам (Ctrl+Alt+L) на блокировку экрана?
Есть в Ubuntu такой баг https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1286910), если при блокировке экрана стоит раскладка RU, то и на экране блокировки при вводе пароля будет эта же раскладка вместо дефолтной системной EN.
Хочу запускать скрипт для смены раскладки клавиатуры на английский язык при блокировке экрана, чтобы при вводе пароля не отслеживать, на каком языке его набираю. Надоело, т. к. в день вводить пароль приходится десятки раз. Скрипт такой:
#!/bin/sh kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+ '{print $2}'` if [ $kbd != us ]; then xdotool key 'alt+shift' fi
В скрипте выполняется проверка и меняется раскладка на EN.
А может у кого-нибудь есть решение по исправлению данного бага и при блокировке экрана по-умолчанию можно сделать английский язык.
Ubuntu 15.04.


Ответ

Сделал так:
Вариант 1 (проверка по наличию процесса lockscreen)
Создал скрипт
cat ~/scripts/enru.sh
#!/bin/bash CHKSTR=`ps aux| grep -v grep | grep lockscreen` if [[ $CHKSTR == *lockscreen* ]]; then kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+ '{print $2}'` if [[ $kbd == ru ]]; then xdotool key 'alt+shift' fi fi
Добавил в crontab от имени пользователя строку
crontab -u USERNAME -e
* * * * * DISPLAY=:0 bash ~/scripts/enru.sh >/dev/null 2>/dev/null
Скрипт каждую минуту проверяет, запущен ли процесс usr/lib/unity/unity-panel-service --lockscreen-mode и, при его наличии, запускает проверку и изменение раскладки клавиатуры. Уверен, что можно сделать более красиво - предлагайте варианты.
Вариант 2 (запуск при нажатии Ctrl+Alt+L)
Создал скрипт
$ cat ~/scripts/enru2.sh
#!/bin/bash gnome-screensaver-command --lock && gsettings set org.gnome.desktop.input-sources current 0 # current 0 говорит о том, что нужно включить дефолтную раскладку en_EN. current 1, соответственно, ru_RU Проверяем, есть ли у нас дополнительные комбинации клавиш, которые мы уже используем:
$ gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
custom0 говорит о том, что одна комбинация уже добавлена, поэтому надо добавить следующую - custom1
$ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']"
Если же вы добавляете свою первую комбинацию клавиш, то выполните команду
$ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']" Отключаем хоткеи для системного lockscreen'а:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys screensaver '' Задаём имя нашему хоткею:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name 'Lockscreen' Указываем, какую команду надо выполнять:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command "/home/$USER/scripts/enru2.sh" Задаём комбинацию клавиш для запуска блокировки экрана:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding 'l'

Комментариев нет:

Отправить комментарий