LINUX.ORG.RU

Обновление dconf ключа по udev-правилу

 , , , ,


0

1

У cinnamon'a в настройках шрифтов можно задать масштаб шрифтов(не dpi экрана). Для dconf'a этот параметр находится тут: /org/cinnamon/desktop/interface/text-scaling-factor.

Я создал udev правило, которое при подключение/отключение hdmi провода вызывает мой скрипт, который, по идее, должен менять этот самый scale:

# cat /etc/udev/rules.d/10-hdmi-dpi.rules
KERNEL=="card0", ACTION=="change", RUN+="/home/hxss/hdmi.sh"

# cat ./hdmi.sh 
#!/bin/sh

user='hxss'

hdmiState=`cat /sys/class/drm/card0-HDMI-A-1/status`

if [ "$hdmiState" == "connected" ]; then
	systemd-cat echo 'HDMI connected'
	sudo -u $user dbus-launch dconf write /org/cinnamon/desktop/interface/text-scaling-factor 1 &> /home/hxss/dpi.log
else
	systemd-cat echo 'HDMI disconnected'
	sudo -u $user dbus-launch dconf write /org/cinnamon/desktop/interface/text-scaling-factor 1.4 &> /home/hxss/dpi.log
fi

Команда dconf write была протестирована в консоли - масштаб менялся на лету. Проблемы 2:

1. При запуске этого скрипта от рута, значение масштаба меняется но не применяется для моей сессии. Как его руками пнуть, чтобы применился?

2. При запуске этого скрипта по udev-правилу(которое судя по whoami тоже от рута выполняется) я получаю в логе ошибку:

sudo: dbus-launch: command not found
Как такое возможно и как побороть/исправить скрипт?


Ответ на: комментарий от r3lgar

точно, туплю. Теперь udev правило может изменить ключ и я из своей сессии через dconf read это вижу.

Но как применить изменения?

hxss
() автор топика
Ответ на: комментарий от hxss

помог machinectl Задержку в 1 сек пришлось добавить, т.к. без возможны баги - не все окна перестраиваются на новый масштаб. Наверное Cinnamon в это время выполняет какие то операции с ними.

# cat /etc/udev/rules.d/10-hdmi-dpi.rules 
KERNEL=="card0", ACTION=="change", RUN+="/home/hxss/.config/systemd/dpi.sh"

# cat /home/hxss/.config/systemd/dpi.sh
#!/bin/sh

user=`stat -c %U $0`

hdmiState=`cat /sys/class/drm/card0-HDMI-A-1/status`

case "$hdmiState" in
 "connected") scale=1 ;;
 *)           scale=1.4 ;;
esac

systemd-cat echo 'HDMI' $hdmiState
machinectl shell --uid=$user .host /usr/bin/systemctl --user --no-block start dpi-cinn@$scale.service

# cat /home/hxss/.config/systemd/user/dpi-cinn@.service
[Unit]
Description=Change Cinnamon text scale to %i

[Service]
ExecStartPre=/bin/sleep 1
ExecStart=/usr/bin/dconf write /org/cinnamon/desktop/interface/text-scaling-factor %i
hxss
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.