2014/06/29

BeagleBoard-xM の USER ボタンでシャットダウンさせる方法

@ Ubuntu 13.10 (GNU/Linux 3.13.3-armv7-x10 armv7l)

私は、BeagleBoard-xM を MPD サーバとして使用しているのですが、キーボードもディスプレイも外してしまっています。
そのため、シャットダウンするためにはキーボードとディスプレイをつなぐか、SSH でログインしないといけません。
どっちにせよ、結構面倒くさいです。

というわけで、普段使われていない USER ボタンをシャットダウンボタンに変更してみました。
USER ボタン

/etc/init.d/user_button_shutdown.pl を作成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl
 
my $pid = fork;
die "$!" unless defined $pid;
 
my $comm = $ARGV[0];
 
if ($pid) {
  exit 0;
}
 
print $comm;
if ($comm ne "start") {
  exit 0;
}
 
open (INPUT, '/dev/input/event0') or die "$!";
 
my $inp = 0;
while( !($inp) ){
    read(INPUT, $inp, 1);
}
close(INPUT);
 
exec("poweroff");
 
exit 0;

起動時に実行されるようにする。
$ sudo chown root:root
$ sudo chmod 744
$ sudo update-rc.d user_button_shutdown.pl defaults
update-rc.d: warning: /etc/init.d/user_button_shutdown.pl missing LSB information
update-rc.d: see <http: wiki.debian.org="" lsbinitscripts="">
 Adding system startup for /etc/init.d/user_button_shutdown.pl ...
   /etc/rc0.d/K20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc1.d/K20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc6.d/K20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc2.d/S20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc3.d/S20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc4.d/S20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc5.d/S20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
</http:>

問題点

すごく雑に作ったので、 missing LSB information が出ちゃうけど、現実的には問題ないから放置しております…

あと、キーボード等がつながっていると、USR Switch が /dev/input/event1 や event2 に割り当てられてしまう問題が。
動的に確認する方法はないものだろうか?