Skip to content
kinneko edited this page Nov 15, 2013 · 4 revisions

HDMIでスクリーンが切れないようにする

 AudioをHDMIに頼っているのと、インターフェイスがスリープすると音も止まってしまうため、HDMI出力を落とさないように設定する必要があります。


Xorgの起動設定内で省電力設定されている?

 まずは、Xorgの設定を確認してみます。

root@beaglebone:~# cat /etc/X11/xorg.conf
Section "Module"
        Load    "extmod"
        Load    "dbe"
        Load    "glx"
        Load    "freetype"
        Load    "type1"
        Load    "record"
        Load    "dri"
EndSection

Section "Monitor"
        Identifier      "Builtin Default Monitor"
EndSection

Section "Device"
        Identifier      "Builtin Default fbdev Device 0"
        Driver  "modesetting"
EndSection

Section "Screen"
        Identifier      "Builtin Default fbdev Screen 0"
        Device  "Builtin Default fbdev Device 0"
        Monitor "Builtin Default Monitor"
	DefaultDepth	16
EndSection

Section "ServerLayout"
        Identifier      "Builtin Default Layout"
        Screen  "Builtin Default fbdev Screen 0"
EndSection

 Xorgにはスリープ系の設定はないようです。

 一般的には、ここに下記のような設定を書き込んで、スリープする時間を設定しますが、見当たりません。

Option "StandbyTime" "10"
Option "SuspendTime" "20"
Option "OffTime" "30"
or
Option "BlankTime" "30"

X上の設定ツール?

 GUIからSystem->Prefrence->PowerManagementで省電力設定ユーティリティを起動してみます。

 30minに設定されていました。これをNeverに設定してみましたが、やはり画面が切れます。

 ここでの設定の効果はないようです。


コマンドでXorgの詳細設定を確認

 ターミナルから、Xorgの設定状態を見てみましょう。

 sshの画面から、環境変数SCREENを設定してみたのですが、操作できませんでした。シリアルコンソールからはできるかもしれません。GUI画面から、ターミナルアプリケーションを起動して設定を見ます。

sh-4.2# xset q
Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000000
  auto repeating keys:  00ffffffdffffbbf
                        fadfffefffedffff
                        9fffffffffffffff
                        fff7ffffffffffff
  bell percent:  50    bell pitch:  400    bell duration:  100
Pointer Control:
  acceleration:  2/1    threshold:  4
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  600    cycle:  600
Colors:
  default colormap:  0x20    BlackPixel:  0x0    WhitePixel:  0xffff
Font Path:
  /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/75dpi/,built-ins
DPMS (Energy Star):
  Server does not have the DPMS Extension
Font cache:
  Server does not have the FontCache Extension

 スクリーンセーバー機能が設定されているのがわかります。タイムアウトは600秒です。省電力機能としてのDPMSは使われていないようです。

 タイムアウトをオフにしてみましょう。

sh-4.2# xset s off
sh-4.2# xset q
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  0    cycle:  600

 はやり切れてしまいます。効果がありませんでした。

 "prefer blanking"をオフにしてみましょう。

sh-4.2# xset s noblank
sh-4.2# xset s off
sh-4.2# xset q
Screen Saver:
  prefer blanking:  no    allow exposures:  yes
  timeout:  0    cycle:  600

 これも、効果がありませんでした。

 どうやら、Xorgからスクリーンを切る指示がでているわけではなさそうです。


フレームバッファで切っている?

 フレームバッファの設定が確認できる/sys/class/graphics/fb0/以下を見てみましょう。

root@beaglebone:~# cat  /sys/class/graphics/fb0/modes
U:1280x720p-0
root@beaglebone:~# cat  /sys/class/graphics/fb0/pan
0,0
root@beaglebone:~# cat  /sys/class/graphics/fb0/stride
2560
root@beaglebone:~# cat  /sys/class/graphics/fb0/bits_per_pixel
16
root@beaglebone:~# cat  /sys/class/graphics/fb0/blank

 一般的な値は確認できます。"blank"に値はありませんでした。状態の確認はできず、値を書きこむことしかできないようです。

 "blank"の設定に"0"を書き込んで無効にしてみます。

root@beaglebone:~# echo 0 > /sys/class/graphics/fb0/blank

 しかし、しばらくすると画面が切れました。効果はないようです。

 ただ、切れた状態からの復帰はできる。

そのくらいで有効だとすると、kernel起動オプションでやるしかないのか。

optargs="consoleblank=0"追記。

root@beaglebone:~# vi /media/BEAGLEBONE/uEnv.txt
optargs="quiet drm.debug=7 consoleblank=0"
root@beaglebone:~# cat /media/BEAGLEBONE/uEnv.txt
optargs="quiet drm.debug=7 consoleblank=0"
root@beaglebone:~# reboot
root@beaglebone:~# cat /proc/cmdline
console=ttyO0,115200n8 quiet drm.debug=7 consoleblank=0 root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait

効いてはいるみたい。

ダメ、止まった。

何か別のものが止めている。

何が止めているのかわからない。

うまくいったら、.xinitrcに書いて終わる予定だったのだが。

 xset s off
 xset -dpms
 xset s noblank 

しょうがないので、cronで回す?

root@beaglebone:~# crontab -e
crontab: installing new crontab

root@beaglebone:~# crontab -l
30 * * * *    /usr/bin/ntpdate-sync silent
5 * * * *    echo 0 > /sys/class/graphics/fb0/blank

しかし、この間に上書きで割り込まれたら、止まってしまう。

根本的な解決ではない。

これで、1時間回して落ちないということは、落としているのはfb自身ってことかな。

書くとタイマ更新されるので、落とされないのじゃなかろうか。

それとも、何か別の原因、モニタ側との通信に何か問題があるという可能性もある。

モニタを変えて再現するかどうか確認してみるか。

inputサブシステムに定期的に何か送りつける

blankに5分おきに書き込んでもスリープしてしまう。 であれば、キーボード入力を定期的に発生させればいい。

Linux Input Subsystemの使い方 http://www.tatapa.org/~takuo/input_subsystem/input_subsystem.html