[英]automatic dimming keyboard backlight in linux
我想在我的 Thinkpad X1 上自動化鍵盤背光,就像我在我的舊 XPS13 上使用的那樣。 在任何按鍵按下背光應該打開,並在一定的空閑時間(這里是 30 秒)后背光應該關閉。 我已經編寫了這個基本的 bash 腳本,雖然它通過xprintidle
輪詢一次,但它運行良好,並且可能會耗盡一些電池:
#!/bin/bash
function switch {
echo $1 > /sys/devices/platform/thinkpad_acpi/leds/tpacpi\:\:kbd_backlight/brightness
}
while (true); do
sleep 1
last=`xprintidle`
status=`cat /sys/devices/platform/thinkpad_acpi/leds/tpacpi\:\:kbd_backlight/brightness`
[ $last -lt 20000 -a $status -lt 2 ] && switch 2 && continue
[ $last -ge 20000 -a $status -eq 2 ] && switch 1 && continue
[ $last -ge 30000 -a $status -ge 1 ] && switch 0 && continue
done
我想知道是否可以完成一些非輪詢的方式,例如通過 systemd 或 dbus。
先感謝您
我設法優化了腳本,使其在燈亮時輪詢的頻率大大降低。 我還包括了 dbus 方式來檢測狀態和切換背光。 為了使用 qdbus,腳本必須以用戶身份運行,因此需要對/sys/devices/../kbd_backlight/brightness
寫入權限。
#!/bin/bash
idletime=30000 # in milliseconds
prepath=/sys/class/leds/tpacpi\:\:kbd_backlight
sudo chmod a+w $prepath/brightness
function switch {
echo $1 > $prepath/brightness
# ALTERNATIVE WITH QDBUS: WORKS BUT SHOWS NOISY OVERLAY ICON
#qdbus local.org_kde_powerdevil /org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl setKeyboardBrightness $1
}
while (true); do
# BOTH THE FOLLOWING WORK FINE, BUT THE SECOND DONT WORK AS ROOT
#last=`xprintidle`
last=`qdbus org.kde.screensaver /ScreenSaver GetSessionIdleTime`
# BOTH THE FOLLOWING WORK FINE, BUT THE SECOND DONT WORK AS ROOT
status=`< $prepath/brightness`
#status=`qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl keyboardBrightness`
val=`< $prepath/brightness_hw_changed`
[ $last -lt $idletime -a $status -lt $val ] && switch $val && sleep ${idletime}e-3 && continue #SWITCH ON
[ $last -ge $idletime -a $status -ge $val ] && switch 0 #SWITCH OFF
sleep 1
done
編輯:現在腳本跟蹤用戶使用 fn 鍵選擇的亮度
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.