ディスプレイが縦に希望通りにキオスクモードで表示できるようになったので、今度はディスプレイを見ていない時にディスプレイを自動で消えるようにしていきます。
まずは、ラズパイのUSB4ポートにつないだディスプレイの電源をオフにするためにUSB4ポートをオン・オフできるようにして、続いてUSB4ポートをシェルスクリプトでオン・オフ操作するようにします。
ラズパイのUSB4ポートをオン・オフ
近接センサを使ってディスプレイを見ていない時は自動的にオフにしたいと思えてきたので、まずはディスプレイをシェル操作でオフにしてみます。
USBポート4ポート全部をオン・オフしかできないみたい。個別は無理っぽい。
$ sudo apt-get install libusb-dev $ cd /home/pi/script $ wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c $ gcc -O2 hub-ctrl.c -o hub-ctrl-armhf-static -lusb -static $ sudo cp hub-ctrl-armhf-static /usr/local/bin/hub-ctrl
試しに実行。この方法はうまく行かない↓
$ sudo hub-ctrl -h 0 -P 2 -p 0 #オフ $ sudo hub-ctrl -h 0 -P 2 -p 1 #オン
やったけど???なんの反応もない。
$ sudo hub-ctrl -v Hub #0 at 001:003 INFO: individual power switching. WARN: Port indicators are NOT supported. Hub Port Status: Port 1: 0000.0503 highspeed power enable connect Port 2: 0000.0303 lowspeed power enable connect Port 3: 0000.0103 power enable connect Hub #1 at 001:002 INFO: individual power switching. WARN: Port indicators are NOT supported. Hub Port Status: Port 1: 0000.0503 highspeed power enable connect Port 2: 0000.0100 power Port 3: 0000.0103 power enable connect Port 4: 0000.0100 power Hub #2 at 001:001 INFO: ganged switching. WARN: Port indicators are NOT supported. Hub Port Status: Port 1: 0000.0503 highspeed power enable connect
portが1~4まで4つある。この中のどれかがUSB4ポートになる。
$ lsusb -t /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M |__ Port 1: Dev 6, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M |__ Port 2: Dev 49, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M//キーボードのドングル |__ Port 2: Dev 49, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M//キーボードのドングル |__ Port 3: Dev 50, If 0, Class=Human Interface Device, Driver=usbhid, 12M//ディスプレイ
USBプラグを抜き刺しして調べたら、Port2の2つが小型のキーボードとマウスのドングルで、Port3がディスプレイのケーブルでした。
こうやったら↓USB4ポートがうまくオン・オフできた。Port1が有線LANポート
sudo hub-ctrl -b 1 -d 2 -P 2 -p 0 #オフ sudo hub-ctrl -b 1 -d 2 -P 2 -p 1 #オン
これ↓Port3は反応なし。どうやらPort 2がUSB4ポートらしい。
sudo hub-ctrl -b 1 -d 2 -P 3 -p 0 sudo hub-ctrl -b 1 -d 2 -P 3 -p 1
やはりラズパイに付いているUSB4ポートは個別にオン・オフする方法は無いみたい。
shスクリプトでUSB4ポートのオン・オフ
USB4ポートをうまくオン・オフできるようになったので、シェルスクリプトで操作するためにusb-4port.shファイルを作る。
コチラに保存→/home/pi/script/usb-4port.sh(実行権限755、改行LFで保存する。)
#!/bin/sh usage() { echo "Usage: $0 (on|off)" exit 2; } if [ $# -ne 1 ]; then usage fi fanctrl() { power=$1 #device=0409:005a #args=$(lsusb -d $device | grep -Po '\d+' | paste -sd ' ' | cut -d ' ' -f 1,2 | xargs printf "-b %s -d %s") args=' -b 1 -d 2' sudo /usr/local/bin/hub-ctrl $args -P 2 -p $power #USB4ポートの電源 #export DISPLAY=:0.0 #/usr/bin/env | /bin/grep DISPLAY #/usr/bin/xset dpms force $1 #ラズパイのバックライト うまくいかない vcgencmd display_power $power #ラズパイのバックライト } case $1 in on ) fanctrl 1;; off ) fanctrl 0;; * ) usage exit 2;; esac
ディスプレイオン・オフはvcgencmdでいけるみたい。
XsetでX-Windowの状態をみてみます。
$ DISPLAY=:0.0 xset q Keyboard Control: auto repeat: on key click percent: 0 LED mask: 00000000 XKB indicators: 00: Caps Lock: off 01: Num Lock: off 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 auto repeat delay: 500 repeat rate: 33 auto repeating keys: 00ffffffdffffbbf fadfffefffedffff 9fffffffffffffff fff7ffffffffffff bell percent: 50 bell pitch: 400 bell duration: 100 Pointer Control: acceleration: 20/10 threshold: 10 Screen Saver: prefer blanking: no allow exposures: no timeout: 0 cycle: 600 Colors: default colormap: 0x20 BlackPixel: 0x0 WhitePixel: 0xffffff Font Path: /usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,built-ins DPMS (Energy Star): Standby: 600 Suspend: 600 Off: 600 DPMS is Disabled
DPMSがDisabledになっているのでスクリーンセーバーはオフだと思う。
$ /home/pi/script/usb-4port.sh on $ /home/pi/script/usb-4port.sh off
これ↑でshでディスプレイがオン・オフできるようになった。
コメント