web-dev-qa-db-ja.com

画面を強制的に空白にして入力を無視できますか?

画面を強制的に空白にし、キーボードとマウスの操作に関係なく、空白を解除するコマンド(ロックのようなもの)を受け取るまで画面を空白のままにしておきたいと思います。

私が知っているコマンドは次のとおりです。

xset dpms force off
sleep 2
xset dpms force on

2秒間だけ空白にしてから空白を解除したいのですが、この2秒間は絶対に空白のままにしておきたいのです。これはできますか?

4
Cestarian

しばらくの間、 キーボードとマウスを無効にする にすることができます。まず、キーボードとマウスの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を把握する必要があります。私の場合、それらは1411でした。

次に、画面のスイッチを切り、キーボードとマウスを無効にし、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
1
terdon

xrandrを使用できます。たとえば、ディスプレイがHDMI1の場合、次のことができます。

xrandr --output HDMI1 --off
sleep 2
xrandr --output HDMI1 --auto

あなたはで名前を見つけることができます

xrandr|grep ' connected'
1
meuh

私はついに、少なくとも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()はスクリプトの最初の引数であり、実際には数値であると想定しています)。私はまだこれに対する適切な解決策に取り組んでいますが、今のところあなたの選択肢は次のいずれかです:

  1. これをルートとして実行します
  2. 特定のACPIイベントでトリガーするスクリプトとacpid構成を記述します。

私は後者のオプションを選びました。 _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パネルでは機能しません

0
Wyatt8740