私のMacBook Proにはかなり素晴らしいキーボードバックライトがありますが、わずかなバグがあります。一定の時間が経過すると画面が消えますが、キーボードバックライトは点灯したままです。
コピーして小さなDBUSを台無しにしましたPythonスクリプトはスクリーンセーバーの状態で変更が発生したときに監視しますが、スクリーンセーバーがアクティブになったときのみ、スクリーンがオフになったときにトリガーされませんまたは無効化:
from dbus.mainloop.glib import DBusGMainLoop
import dbus
import gobject
import logging
logging.basicConfig()
logger = logging.getLogger(__name__)
dbus_loop = DBusGMainLoop(set_as_default=True)
def message_callback(bus, message):
if message.get_interface() == "org.gnome.ScreenSaver":
if message.get_member() == "ActiveChanged":
screensaver_enabled = bool(message.get_args_list()[0])
logger.info("Screen saver changed. Active: %s", screensaver_enabled)
session = dbus.SessionBus(mainloop=dbus_loop)
session.add_match_string_non_blocking("interface='org.gnome.ScreenSaver'")
session.add_message_filter(message_callback)
logger.info("Starting up.")
loop = gobject.MainLoop()
loop.run()
これは、スクリーンセーバーがアクティブになっているときはいつでもうまく機能しますが、スクリーンの電源状態が変更されても変更されません。 [明るさ]および[設定のロック]に移動することで、1分後に画面の電源がオフになり、ロックされないように設定できます。その後、スクリーンセーバーの時間を別の時間(10分など)に設定できます。
Changed
信号のorg.gnome.SettingsDaemon.Power.Screen
インターフェイスでリッスンしようとしましたが、これは画面の輝度が手動で変更された場合にのみ発生します。
画面の電源状態がいつ変化したかを判断するために、何を聞くことができますか?キーボードのバックライトを無効にできるように、画面の電源がオフになるたびに実行するスクリプトを作成したいと思います。
まあ、「評判」を持っていないのでコメントを残せないのは残念だ。これはソリューションというよりもコメントです。
似たようなものを探していましたが、代わりに「org.gnome.SessionManager.Presence」を監視しています。モニターの後ろにバイアス照明用のLEDがあり、モニターでLEDをオン/オフにしたい。
これは、コンピューターを手動でロックした場合に機能しますが、「スクリーンオフ」設定と「後のスクリーンロック」設定を異なる間隔のままにすると、モニターがオフになるとLEDがオフになりますが、スクリーンセーバーロックが作動するとLEDがオフになりますLEDが再び点灯します。
_getState () {
dbus-monitor --session "type=signal,interface=org.gnome.SessionManager.Presence,member=StatusChanged" |
while read x; do
case "$x" in
*"uint32 3"*)
/home/victor/bin/devices/kasa_cntrl.sh off
echo -e "$(date)\t-\tTurned off" >> "$log"
;;
*"uint32 0"*)
/home/victor/bin/devices/kasa_cntrl.sh on
echo -e "$(date)\t-\tTurned on" >> "$log"
;;
esac
done
}
Ubuntu 18.04をインストールしたところ、デフォルトではスクリーンセーバーが表示されていませんでした。そして、正直なところ、私はそれを欲しくないので、インストールを気にしません。
しかし、私はAddUserActiveWatch
およびorg.gnome.Mutter.IdleMonitor
インターフェースからのRemoveWatch
とトリックを行うように見えるgnomeからのメソッド呼び出しをいくつか見つけました。
これが私のスクリプトです。
#!/usr/bin/env python
import dbus, gobject
from dbus.mainloop.glib import DBusGMainLoop
from subprocess import call
def filter_cb(bus,message):
if message.get_member() == "AddUserActiveWatch":
print("Monitor off")
call("/usr/bin/g810-led -dv 046d -dp c337 -a 000000", Shell=True)
Elif message.get_member() == "RemoveWatch":
print("Monitor on")
call("/usr/bin/g810-led -dv 046d -dp c337 -p /etc/g810-led/profile", Shell=True)
return
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string_non_blocking("interface='org.gnome.Mutter.IdleMonitor',eavesdrop='true'")
bus.add_message_filter(filter_cb)
mainloop = gobject.MainLoop ()
mainloop.run ()
結果は次のとおりです。
免責事項:
Startup Applications
GUIで追加することができ、動作しますPS:「バグ」が見つかりました。画面のフェードを中断すると、キーボードは消灯したままになります。