web-dev-qa-db-ja.com

スクロールロックキーを使用してキーボードのバックライトを切り替えるにはどうすればよいですか?

最近、ライトを切り替えるためにScrollLockが必要なバックライト付きキーボードを購入しました。私はすぐにいくつかの簡単なbashコマンドで回避できるいくつかの問題に遭遇しました this threadを参照してください。

要するに、この問題を修正したことがわかったコマンドは次のとおりです。

xset led named "Scroll Lock"

スクロールロックを有効にするには(そしてライトをオンにするには)、

xset -led named "Scroll Lock"

Scroll Lockを無効にして、ライトをオフにするには。

Scroll Lockキーイベントを受信して​​(Scroll Lock)機能がオフになっている場合に前者のコマンドを発行し、それ以外の場合は後者を発行する場合、どのようなオプションを使用できますか?あれは、

if(ScrollLockIsEnabled)
    systemCommand('xset -led named "Scroll Lock");
else
    systemCommand('xset led named "Scroll Lock"`);

または類似。

少なくとも、スクロールロックの最後の状態を保持できるようにする変数(可能な場合)を保持するある種のBashスクリプトを実行することを考えていました。次に、xbindkeys(ユーザーが入力した主要なイベントに基づいてコマンドを発行する)を使用してこのスクリプトを実行できます。

4
sherrellbc

同様の問題を検索した後、これを見つけました。 1歳なのでとにかく答えたほうがいいです。

質問のように、xset led named "Scroll Lock"を使用すると、LEDが有効になり、xset -led named "Scroll Lock"はキーボードのLEDが無効になります。 xset --helpを調べると、xset qが現在のステータス情報を出力していることがわかります。

ターミナルのstdoutの切り捨てられたサンプルを次に示します。

Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000002
  XKB indicators:
    00: Caps Lock:   off    01: Num Lock:    on     02: Scroll Lock: off
    03: Compose:     off    04: Kana:        off    05: Sleep:       off
    06: Suspend:     off    07: Mute:        off    08: Misc:        off
    09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
    12: Group 2:     off    13: Mouse Keys:  off

文字列Scroll lock: offは、スクロールロックがオフの場合にのみ出力に表示されるため、grepを使用してこの文字列を確認できます。 xset q | grep "Scroll Lock: off"は私たちの目的には問題なく機能します。次に、シェルスクリプトで、null文字列がオンになっていることを確認できます。

#!/bin/sh

result=$(xset q | grep "Scroll Lock: off")
if [ -z "$result" ]; then # Scroll Lock must be on
  echo "Off"
  xset -led named "Scroll Lock"
else
  echo "On"
  xset led named "Scroll Lock"
fi

次に、必要に応じて、ウィンドウマネージャーまたはデスクトップ環境の構成を使用して、スクロールロックを押したときにこのスクリプトを実行します。

3
Maeve Kennedy

bashを使用するだけで、Uはこれを実行できます。これは、スクロールロックバックライトキーボードで使用します。ルートとして実行する必要があります

#!/usr/bin/env bash
if [[ $EUID -ne 0 ]]; then
    echo "this program requires root user" 2>&1
    exit 1
fi

dir1=$(find /sys/devices/ -name brightness | grep scrolllock)
while :
do
    var1=`cat $dir1`
    if [ $var1 == 0 ] ; then
        echo 1 > $dir1
    fi
    sleep 5
done

これをルートcrontabで使用します

@reboot sh ~/sh/backlight.sh &
2
user203721