「キーボードバックライト」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎全メーカー共通: 英語版より記事を追加)
(→‎D-Bus: 英語版より記事を追加)
77行目: 77行目:
 
else:
 
else:
 
print("Script takes exactly one argument.", len(argv[1:]), "arguments provided.")</nowiki>}}
 
print("Script takes exactly one argument.", len(argv[1:]), "arguments provided.")</nowiki>}}
  +
  +
Alternatively the following bash one-liner will set the backlight to the value specified in the ''argument'':
  +
  +
{{bc|<nowiki>
  +
setKeyboardLight () {
  +
dbus-send --system --type=method_call --dest="org.freedesktop.UPower" "/org/freedesktop/UPower/KbdBacklight" "org.freedesktop.UPower.KbdBacklight.SetBrightness" int32:$1
  +
}</nowiki>
  +
}}
  +
  +
==== On GNOME ====
  +
  +
The following can be run from a terminal or mapped to keybindings
  +
  +
$ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Keyboard.StepUp
  +
$ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Keyboard.StepDown
  +
  +
==== On MATE ====
  +
  +
{{Style|Informal and unclear description. No relevance to MATE.}}
  +
  +
In case you use [[MATE]] environment you might get tired with repeated lighting keyboard backlight while logging in, unlocking screen or waking up dimmed display. Following setup prevent from automatic lighting up during any action. The only triggers remain plugging in the adapter and fresh boot. After that you can control keyboard backlight only via hotkeys (eg. ThinkPad Fn + spacebar).
  +
  +
To prevent automatic lighting up just edit file {{ic|/usr/share/dbus-1/system.d/org.freedesktop.UPower.conf}} as follows (two occurrences of "deny"):
  +
  +
{{hc|/usr/share/dbus-1/system.d/org.freedesktop.UPower.conf|<nowiki>
  +
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
  +
  +
<!DOCTYPE busconfig PUBLIC
  +
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
  +
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
  +
<busconfig>
  +
<!-- Only root can own the service -->
  +
<policy user="root">
  +
<allow own="org.freedesktop.UPower"/>
  +
</policy>
  +
<policy context="default">
  +
  +
<allow send_destination="org.freedesktop.UPower"
  +
send_interface="org.freedesktop.DBus.Introspectable"/>
  +
  +
<allow send_destination="org.freedesktop.UPower"
  +
send_interface="org.freedesktop.DBus.Peer"/>
  +
<allow send_destination="org.freedesktop.UPower"
  +
send_interface="org.freedesktop.DBus.Properties"/>
  +
<allow send_destination="org.freedesktop.UPower.Device"
  +
send_interface="org.freedesktop.DBus.Properties"/>
  +
<deny send_destination="org.freedesktop.UPower.KbdBacklight"
  +
send_interface="org.freedesktop.DBus.Properties"/>
  +
<allow send_destination="org.freedesktop.UPower.Wakeups"
  +
send_interface="org.freedesktop.DBus.Properties"/>
  +
  +
<allow send_destination="org.freedesktop.UPower"
  +
send_interface="org.freedesktop.UPower"/>
  +
<allow send_destination="org.freedesktop.UPower"
  +
send_interface="org.freedesktop.UPower.Device"/>
  +
<deny send_destination="org.freedesktop.UPower"
  +
send_interface="org.freedesktop.UPower.KbdBacklight"/>
  +
<allow send_destination="org.freedesktop.UPower"
  +
send_interface="org.freedesktop.UPower.Wakeups"/>
  +
</policy>
  +
</busconfig>
  +
</nowiki>}}

2021年12月23日 (木) 11:31時点における版

キーボードのバックライトの輝度レベルを制御するには、さまざまな方法があります。

全メーカー共通

There are a variety ways to manage the brightness level and different helpers tools to accomplish this, such as brightnessctl or light.

The sys pseudo-file system exposes an interface to the keyboard backlight. The current brightness level can be get by reading /sys/class/leds/tpacpi::kbd_backlight/brightness. For example to get the maximum brightness level:

$ cat /sys/class/leds/tpacpi::kbd_backlight/max_brightness

To set the brightness to 1:

# echo 1 > /sys/class/leds/tpacpi::kbd_backlight/brightness

When using brightnessctl you can get a list of available brightness controls with brightnessctl --list, then to show the kbd backlight information:

$ brightnessctl --device='tpacpi::kbd_backlight' info

This will show the absolute and relative current value and the maximum absolute value. To set a different value:

$ brightnessctl --device='tpacpi::kbd_backlight' set 1

xset

Some keyboard manufactores are not recognized by brightnessctl or light, but you can use xorg-xset to control its lights if you are running Xorg.

The first parameter led turns on the led, and -led turns it off, the NUMBER parameters accepts integers for 1 to 32 (each number corresponds to a led in you system, keyboards seem to generally be number 3), or 'on' and 'off' (on will turn ALL lights on, and off will turn ALL lights off).

To turn on the lights:

$ xset led NUMBER

To turn off the lights:

$ xset -led NUMBER

D-Bus

D-Bus インタフェース経由でコンピュータのキーボードのバックライトを制御することができます。D-Bus を使用する利点は、デバイスファイルへの変更が必要なく、全てのメーカーで使えることです。

以下に Python 3 での実装例を示します。/usr/local/bin/ にスクリプトを置き、実行可能にします。/usr/local/bin/kb-light.py +/usr/local/bin/kb-light.py - を実行するキーボードショートカットを作成することでキーボードの輝度を変えることができます。

/usr/local/bin/kb-light.py
#!/usr/bin/env python3
# coding: utf-8

from sys import argv
import dbus


def kb_light_set(delta):
    bus = dbus.SystemBus()
    kbd_backlight_proxy = bus.get_object(org.freedesktop.UPower, /org/freedesktop/UPower/KbdBacklight)
    kbd_backlight = dbus.Interface(kbd_backlight_proxy, org.freedesktop.UPower.KbdBacklight)

    current = kbd_backlight.GetBrightness()
    maximum = kbd_backlight.GetMaxBrightness()
    new = max(0, current + delta)

    if new >= 0 and new <= maximum:
        current = new
        kbd_backlight.SetBrightness(current)

    # Return current backlight level percentage
    return 100 * current / maximum

if __name__ == __main__:
    if len(argv[1:]) == 1:
        if argv[1] == "--up" or argv[1] == "+":
            # ./kb-light.py (+|--up) to increment
            print(kb_light_set(1))
        elif argv[1] == "--down" or argv[1] == "-":
            # ./kb-light.py (-|--down) to decrement
            print(kb_light_set(-1))
        else:
            print("Unknown argument:", argv[1])
    else:
        print("Script takes exactly one argument.", len(argv[1:]), "arguments provided.")

Alternatively the following bash one-liner will set the backlight to the value specified in the argument:

setKeyboardLight () {
    dbus-send --system --type=method_call  --dest="org.freedesktop.UPower" "/org/freedesktop/UPower/KbdBacklight" "org.freedesktop.UPower.KbdBacklight.SetBrightness" int32:$1 
}

On GNOME

The following can be run from a terminal or mapped to keybindings

$ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Keyboard.StepUp
$ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Keyboard.StepDown

On MATE

この記事あるいはセクションで使われている用語や表現には問題が存在します。
議論: Informal and unclear description. No relevance to MATE. (議論: トーク:キーボードバックライト#)

In case you use MATE environment you might get tired with repeated lighting keyboard backlight while logging in, unlocking screen or waking up dimmed display. Following setup prevent from automatic lighting up during any action. The only triggers remain plugging in the adapter and fresh boot. After that you can control keyboard backlight only via hotkeys (eg. ThinkPad Fn + spacebar).

To prevent automatic lighting up just edit file /usr/share/dbus-1/system.d/org.freedesktop.UPower.conf as follows (two occurrences of "deny"):

/usr/share/dbus-1/system.d/org.freedesktop.UPower.conf
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->

<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <!-- Only root can own the service -->
  <policy user="root">
    <allow own="org.freedesktop.UPower"/>
  </policy>
  <policy context="default">

    <allow send_destination="org.freedesktop.UPower"
           send_interface="org.freedesktop.DBus.Introspectable"/>

    <allow send_destination="org.freedesktop.UPower"
           send_interface="org.freedesktop.DBus.Peer"/>
    <allow send_destination="org.freedesktop.UPower"
           send_interface="org.freedesktop.DBus.Properties"/>
    <allow send_destination="org.freedesktop.UPower.Device"
           send_interface="org.freedesktop.DBus.Properties"/>
    <deny  send_destination="org.freedesktop.UPower.KbdBacklight"
           send_interface="org.freedesktop.DBus.Properties"/>
    <allow send_destination="org.freedesktop.UPower.Wakeups"
           send_interface="org.freedesktop.DBus.Properties"/>

    <allow send_destination="org.freedesktop.UPower"
           send_interface="org.freedesktop.UPower"/>
    <allow send_destination="org.freedesktop.UPower"
           send_interface="org.freedesktop.UPower.Device"/>
    <deny  send_destination="org.freedesktop.UPower"
           send_interface="org.freedesktop.UPower.KbdBacklight"/>
    <allow send_destination="org.freedesktop.UPower"
	   send_interface="org.freedesktop.UPower.Wakeups"/>
  </policy>
</busconfig>