SDDM: Переключаем раскладку автоматически при блокировании экрана
Продолжаем разбираться с окном логина (sddm, gdm и прочие *dm).
В предудущей части мы научились переключать раскладку из консоли минуя кнопки и мышки.
А теперь мы научимся менять раскладку автоматически при блокировании экрана.
Зачем это нужно? Чаще всего пароль у нас на латинице. А заблокировать экран можно при любой включенной раскладке. Это приводит к тому, что на экране логина эту самую раскладку на до менать. Неудобно!
1. Определяем, когда система была заблокирована
#!/usr/bin/env bash
dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
Если запустить скрипт, заблокировать, а потом разблокировать экран, то мы увидим его работу.
SCREEN_LOCKED
SCREEN_LOCKED
SCREEN_UNLOCKED
SCREEN_UNLOCKED
Два сообщения из-за особенностей интерфейса. Можно привязываться к другому интерфейсу, но в данном случае это некритично.
2. Учимся запускать скрипт фоном через systemd
Делаем скрипт /.local/bin/set-layout-on-lock
. Не забывайте поставить на него `+x .
#!/usr/bin/env bash
dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) qdbus org.kde.keyboard /Layouts org.kde.KeyboardLayouts.setLayout 0;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
Создаём каталог для сервисов systemd.
$ mkdir -p ${HOME}/.config/systemd/user
Пишем сервис в ${HOME}/.config/systemd/user/set-kbd-layout-on-lock.service
.
[Unit]
Description=Set custom locale on screen lock
[Service]
Restart=always
ExecStart=%h/.local/bin/set-layout-on-lock
[Install]
WantedBy=graphical-session.target
%h
- означает директорию текущего пользователя.graphical-session.target
- означает, что сервис будет запускаться только с графическим интерфейсом (не нужен он нам в консоли).
3. Включаем
$ systemctl --user enable --now set-kbd-layout-on-lock
Сервис будет включен и тут же запущен.
Посмотреть состояние можно командой status
.
$ systemctl --user status set-kbd-layout-on-lock
Литература
KDE: Переключаем раскладку из консоли
Очень полезной штукой является возможность переключить раскладку из консоли.
Зачем? Например, при блокировании сеанса надо сделать так, чтобы раскладка стала английской.
Так как дистрибутивы очень сильно видоизменились и стали поставляться с wayland и производными systemd (keyboad, logind, …), то переключать стандартными линуксовыми средствами вроде setxkbmap, xkb-switch и прочими способами не получиться.
Теперь раскладка в дистрибутивах переключается при помощи dbus и сигналов.
Для kde это делается вызовом метода org.kde.KeyboardLayouts.setLayout
в сервисе org.kde.keyboard
.
$ qdbus org.kde.keyboard /Layouts org.kde.KeyboardLayouts.setLayout 1
Последний аргумент - это номер раскладки в списке.
Посмотреть список раскладок можно через другой метод.
$ qdbus --literal org.kde.keyboard /Layouts org.kde.KeyboardLayouts.getLayoutsList
[Argument: a(sss) {[Argument: (sss) "us", "", "Английская (США)"], [Argument: (sss) "ru", "", "Русская"]}]
Обязательный аргумент в нашем случае - это --literal
. Без него команда просто выведет сообщение о том, что не может отобразить нестандарный тип данных.
$ qdbus org.kde.keyboard /Layouts org.kde.KeyboardLayouts.getLayoutsList
qdbus: I don't know how to display an argument of type 'a(sss)', run with --literal.
Linux: Система засыпает при заблокированном сеансе
Gnome и Kde страдают тем, что на экране логина за электропитание отвечает не утилита управления электропитанием, а logind из состава systemd и настроить поведение компьютера в этом режиме в панелях управления нельзя.
Проблема наблюдается как в gdm, так и sddm.
Проявляется в следующих случаях:
- Включили машину, но не вошли в систему -> компьютер ушел в спячку
- Включили ноутбук с внешним монитором, поработали и заблокировали сеанс -> система ушла в спячку если закрыть крышку
Есть даже много отчетов об ошибках и информация от разработчиков о том, что это сделано “ради прохождения сертификации энергопотребления”.
Чтобы избежать засыпания системы после включения нужно сконфигурировать gdm отключив ему спячку (sddm, lxdm и т.п. работают нормально).
sudo -u gdm dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
Чтобы избежать проблемы засыпания ноутбука при закрытой крышке нужно дополнительно прописать настройки в /etc/systemd/login.conf.d/00-lid.conf
или же в /etc/systemd/login.conf
.
[Login]
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
IDEA: Не работает превью для Markdown
Есть вероятность, что возможность смотреть превью markdown-файлов в соответствующем плагине отсутствует.
Скорее всего проблема в jdk и jfx, которые вы используете. Чаще всего используются те, что идут бандлом с самое ide.
Нужно поменять:
- идем в быстрый поиск (двойное нажатие shift)
- вбиваем choose boot java runtime for ide
- выбираем другую версию jdk c jcef
- плагин должен заработать корректно
- если не случилось - повторяем (можно использовать системный jre)
Linux: несколько способов монтирования образов
Образ с одним разделом
образ с одним разделом или нужно прьсто посмотреть структура разделов не монтируя.
Активировать
# losetup /dev/loop0 some.img
Деактивировать
# losetup -d /dev/loop0
Образ с несколькими разделами
Если образ содержит несколько разделов и нужну примонтирвоать какой-либо из них.
Активировать
# kpartx -v -a some.img
add map loop0p1 (251:0): 0 497664 linear /dev/loop0 2048
add map loop0p2 (251:1): 0 66605058 linear /dev/loop0 501758
add map loop0p5 (251:2): 0 66605056 251:1 2
# ls /dev/mapper/
control loop0p1 loop0p2 loop0p5
# mount /dev/mapper/loop0p1 /mnt/test
# mount | grep test
/dev/mapper/loop0p1 on /mnt/test type ext2 (rw)
Деактивировать
# kpartx -v -d logging-test.img
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0
#