SDDM: Переключаем раскладку автоматически при блокировании экрана

Категории: HowTo

Продолжаем разбираться с окном логина (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: Переключаем раскладку из консоли

Категории: HowTo

Очень полезной штукой является возможность переключить раскладку из консоли.

Зачем? Например, при блокировании сеанса надо сделать так, чтобы раскладка стала английской.

Так как дистрибутивы очень сильно видоизменились и стали поставляться с 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

Layout switch

Последний аргумент - это номер раскладки в списке.

Посмотреть список раскладок можно через другой метод.

$ 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: Система засыпает при заблокированном сеансе

Категории: HowTo

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

Категории: HowTo

There are no available preview providers

Есть вероятность, что возможность смотреть превью markdown-файлов в соответствующем плагине отсутствует.

Скорее всего проблема в jdk и jfx, которые вы используете. Чаще всего используются те, что идут бандлом с самое ide.

Нужно поменять:

  • идем в быстрый поиск (двойное нажатие shift)
  • вбиваем choose boot java runtime for ide
  • выбираем другую версию jdk c jcef
  • плагин должен заработать корректно
  • если не случилось - повторяем (можно использовать системный jre)

Choose JRE

Choose new version

Done

Linux: несколько способов монтирования образов

Категории: HowTo

Монтирование образа с несколькими разделами

Образ с одним разделом

образ с одним разделом или нужно прьсто посмотреть структура разделов не монтируя.

Активировать

# 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
#