ラズパイ3に7インチディスプレイ追加 キオスクモードでWebIOPiボタン操作&Grafanaグラフ表示

ディスプレイが縦に希望通りにキオスクモードで表示できるようになったので、今度はディスプレイを見ていない時にディスプレイを自動で消えるようにしていきます。

まずは、ラズパイのUSB4ポートにつないだディスプレイの電源をオフにするためにUSB4ポートをオン・オフできるようにして、続いてUSB4ポートをシェルスクリプトでオン・オフ操作するようにします。

この記事は複数のページに別れています
  1. (今このページを見ています)

ラズパイの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でディスプレイがオン・オフできるようになった。

コメント

タイトルとURLをコピーしました