画面を強制的に空白にし、キーボードとマウスの操作に関係なく、空白を解除するコマンド(ロックのようなもの)を受け取るまで画面を空白のままにしておきたいと思います。
私が知っているコマンドは次のとおりです。
xset dpms force off
sleep 2
xset dpms force on
2秒間だけ空白にしてから空白を解除したいのですが、この2秒間は絶対に空白のままにしておきたいのです。これはできますか?
しばらくの間、 キーボードとマウスを無効にする にすることができます。まず、キーボードとマウスのIDを取得します。
$ xinput --list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Logitech M325 id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ SIGMACHIP USB Keyboard id=11 [slave keyboard (3)]
私は自分のマシンにさまざまなものを接続していて、ラップトップを実行しているので、xinput --list
の出力は非常に長くなります。わかりやすくするために、ここで編集しました。無効にする必要のあるデバイスのIDを把握する必要があります。私の場合、それらは14
と11
でした。
次に、画面のスイッチを切り、キーボードとマウスを無効にし、2秒待ってから、すべてを再びオンにします。
xinput set-prop 'Logitech M325' 'Device Enabled' 0 &&
xinput set-prop 'SIGMACHIP USB Keyboard' 'Device Enabled' 0 &&
xset dpms force off &&
sleep 2 &&
xinput set-prop 'Logitech M325' 'Device Enabled' 1 &&
xinput set-prop 'SIGMACHIP USB Keyboard' 'Device Enabled' 1 &&
xset dpms force on
私のシステムでは、SIGMACHIP USB
は複数のデバイスに一致します。何らかの理由で、それはマウスとしても識別されます。適切なデバイスを確実に入手するために、クラスの前に名前を付けることができます。
xinput set-prop 'pointer:Logitech M325' 'Device Enabled' 0 &&
xinput set-prop 'keyboard:SIGMACHIP USB Keyboard' 'Device Enabled' 0 &&
xset dpms force off &&
sleep 2 &&
xinput set-prop 'pointer:Logitech M325' 'Device Enabled' 1 &&
xinput set-prop 'keyboard:SIGMACHIP USB Keyboard' 'Device Enabled' 1 &&
xset dpms force on
xrandrを使用できます。たとえば、ディスプレイがHDMI1の場合、次のことができます。
xrandr --output HDMI1 --off
sleep 2
xrandr --output HDMI1 --auto
あなたはで名前を見つけることができます
xrandr|grep ' connected'
私はついに、少なくともmyシステム(どちらもLVDSパネルを使用するLenovo ThinkPadX201とThinkPadX201 Tablet)で機能する答えを見つけました。実際にはバックライトを無効にしますが、半透過型または反射型のLCD(これはかなり珍しい)でない限り、実質的にLCDオフ。
まず、インストールしました Intel GPU Tools (README here 詳細については)。 Debianでは、これは次の方法で行われました。
_# apt-get install intel-gpu-tools
_
このパッケージには、_intel_backlight
_と呼ばれるプログラムが含まれています。このプログラムは、Intel GPUのレジスタと直接対話するため、最新のLinuxカーネルのsysfs
ファイルシステムの「安全範囲」に限定されません。輝度レベル0は常に「低レベルの明るさでオンになっている」はずです。
残念ながら、このプログラムはrootとして実行する必要があり、入力を適切にサニタイズすることはできません(atoi()
はスクリプトの最初の引数であり、実際には数値であると想定しています)。私はまだこれに対する適切な解決策に取り組んでいますが、今のところあなたの選択肢は次のいずれかです:
私は後者のオプションを選びました。 _acpi_listen
_がACPIイベントの発生として検出したが、ラップトップですでに何も実行するようにマップされていないキーの組み合わせを選択しました。 fn + f1を選びました。理論的には、明るさを下げるキーで起動し、明るさがすでに最小になっているかどうかを確認し、最小になっている場合はバックライトをオフにすることもできます。
私は次のファイルを書きました:
_/etc/acpi/events/fnf1-toggle-lcd:
_
_event=button/fnf1
action=/etc/acpi/toggle-thinklight-or-tablet-lcd.sh "%e"
_
_/etc/acpi/toggle-thinklight-or-tablet-lcd.sh:
_
_#! /bin/bash
# intel_backlight appears to require root privs.
# is the light on or off?
export INTEL_BACKLIGHT="/usr/bin/intel_backlight"
export light_state=$("$INTEL_BACKLIGHT" | sed 's/current backlight value: //g'|sed 's/%//g')
if [ "$light_state" -eq 0 ]; then # if the backlight is currently off
# restore brightness level
cat /root/brightness > /sys/class/backlight/acpi_video0/brightness
else # the backlight is currently on
# back up current brightness level
cat /sys/class/backlight/acpi_video0/brightness > /root/brightness
# turn off backlight
"$INTEL_BACKLIGHT" 0
fi
_
シェルスクリプトが実行可能としてマークされていることを確認してください。
たぶん、正確に望んでいたものではなく、パーティーに遅れていることはわかっていますが、ここでは機能しています。
または、eDPパネルでは、_echo 0 > /sys/class/backlight/acpi_video0/bl_power
_を実行すると機能する場合があります。どうやら一部のカーネル開発者はそれが良い考えだと思ったので、これは絶対にLVDSパネルでは機能しません。