回回 PPE : Petit Panda Extreme 回回

Tweets

Tweetsはまだありません。

Mobile

携帯電話からアクセス
クリックで拡大します
URLをメールアドレスに送信

RSS RSS

Player

PPE Live Video (SUPERFEVER 2012)


2013-10-17 22:42:30投稿者 : Petit Panda Extreme
この記事のURL コメント(0) トラックバック(0) nice!

phpをコマンドラインで実行するときに引数をわかりやすくする工夫

自分用メモを兼ねて。

cron処理等のコマンドラインでphpを実行する場合、

user@host: php -c (php.iniファイル) examepl.php 引数1 引数2

のような形式でコマンド実行するが、
この場合php内部で引数を受け取ろうと思うと

if ( $argc > 1 ) {
    $var1 = $argv[1];
    $var2 = $argv[2];
}

といった代入方法になるので、順番を前後させることができない。
こうなると、久しぶりに手動実行しようかなといったときに
いちいち調べながら順番を間違えないように。。等と
無駄な手間をいつも発生させてしまう(自分の場合は)。

ので、そういったphpスクリプトの実行時に
一般的なLinuxコマンドと同じようにオプション形式で渡せるよう
変換処理を汎用化してやりつつ、$_REQUESTにつっこんでやることで
ブラウザ経由の処理をシミュレートすることも可能という寸法。

やり方は簡単、実行したいphpスクリプトのどアタマに

if ( $argc > 0 ) {
    foreach( $argv as $strArg ){
        if ( ( $arrTmp = explode('=', $strArg) ) && count($arrTmp) > 1 ) {
            $_REQUEST[$arrTmp[0]] = $arrTmp[1];
        }
    }
}

と書いておいてあげれば、あとは実行する際

user@host: php -c (php.iniファイル) example.php 引数1=値1 引数2=値2

とヒューマンリーダブルな形式で記述することができる。

2011-04-05 16:18:03投稿者 : 隼人
この記事のURL コメント(0) トラックバック(0) nice!

LCD-USB10XB-TをUbuntuで使う

I-O DATAのLCD-USB10XB-TというUSB接続タッチパネルディスプレイをLinuxから使う方法。
しかもデュアルディスプレイじゃなくプライマリシングルで。
実売価格15K円ほどでありながら、小型タッチパネルを実装できるとあって遊び甲斐ありそうな製品なんだけど、なぜかLinuxでの動作報告が全然みつからない不思議な子。
twitterでご質問いただいたので、家鯖のリプレイス記事としてまとめるまえに個別上げしてみる。

環境としては、OSとしてUbuntu 10.10をインストールした、Intel BOXD510MO。
01 : デバイスの情報を取得
まず最初に、デバイスをPCに接続した上で認識状況を確認。使用するコマンドはlsusb。
user@host: lsusb
(中略)
Bus 001 Device 006: ID 17e9:0156 Newnham Research
Bus 001 Device 006: ID 0eef:0001 D-WAV Scientific Co., Ltd eGalax TouchScreen
(中略)
ここでNewham Researchとなっているのがdisplaylinkチップを搭載したUSB-VGA変換アダプタで、eGalaxy TouchScreenとなっているのがタッチパネル部分。
この中でIDとなっているコロン区切りのデータが最も重要で、この内容は ベンダID:プロダクトID という書式になっている。
この手順を参考に他のdisplaylink製品を認識させたい場合、これらのIDを適宜読み替えて作業してください。

02 : 必要ファイルのインストール
次に、一連の作業で必要になるパッケージをインストール。セキュリティアップデート等の都合を考えて、可能なかぎり公式リポジトリにあるパッケージを利用するようにしたほうがいい。
user@host: sudo apt-get install libusb-dev xserver-xorg-video-displaylink x11proto-input-dev
03 : displaylinkドライバインストール
いよいよdisplaylinkのドライバをインストールする。
このドライバは悲しいことにUbuntuのリポジトリに登録されていないので、手動でダウンロード&展開。
user@host: wget http://people.freedesktop.org/~berniet/libdlo-0.1.2.tar.gz
user@host: tar xvzf libdlo-0.1.2.tar.gz
user@host: cd libdlo-0.1.2
user@host: ./configure
user@host: make
user@host: sudo make install
Ubuntu 10.10のクリーンインストール後であれば、特にエラーも出ずにインストールが完了するはず。この段階でエラーが出るような場合、既存のドライバ等が悪さをしている可能性が高いので、原因究明は環境によって異なる、困難な状況になることが多い。
なお、このドライバにはデバイス試験用のコマンドも同梱されている。
user@host: sudo make check
とすることで、テストパターンをひと通り表示するデモプログラムが実行される。
LCD-USB10XB-T以外の製品でもdisplaylinkのチップを搭載しているものでこの試験コマンドが正常に実行できるなら、基本的に利用可能なデバイスだと思ってOK。
また、いろいろ調べているとdisplaylink-modを使うパターンやudlfbをダウンロード&コンパイルするパターンが見つかるが、とりあえず手元のUbuntu 10.10で動作確認できたのはlibdloなので、それ以外のものは入れないほうがいい。

04 : xrandrおまじない
xrandrは、画面サイズの変更や回転制御等をXの再起動を行わず動的に実行可能な機能拡張。らしい。w
この作業を行わない場合、Xの起動時にいくつかの機能が正常に動作せず、真っ暗な画面にマウスカーソルだけが表示されて何もできない状況になったので大事。
user@host: sudo vi /etc/gdm/Init/Default
赤字部分が追加した箇所。
gdmwhich () {
  COMMAND="$1"
  OUTPUT=
  IFS=:
  for dir in $PATH
  do
    if test -x "$dir/$COMMAND" ; then
      if test "x$OUTPUT" = "x" ; then
        OUTPUT="$dir/$COMMAND"
      fi
    fi
  done
  IFS=$OLD_IFS
  echo "$OUTPUT"
}

XRANDR=`gdmwhich xrandr`
if [ "x$XRANDR" != "x" ] ; then
    $XRANDR -o 0
fi

sysresources=/etc/X11/Xresources

05 : usb-modeswitchでdisplaylinkのVGAを強制認識
このステップがLCD-USB10XB-Tを使用するうえで最大のポイントかもしれない。
dmesgを読むと、この製品はUSBケーブルで接続した際に、ストレージデバイスとして認識されてしまっている。
その理由は、チップ上に複数のUSBデバイスを実装してあって、画面描画用のUSB-VGA変換デバイスとドライバ保存用のストレージデバイスが同居している点にある。
Windowsマシンにこの製品を接続すると、ストレージデバイスのウィンドウが開いて、ドライバインストールがその場で行える仕組み。
付属CDの紛失やドライバのダウンロードがよくわからないという一般ユーザ向けには便利な機能だが、Linuxから使用するには邪魔なことこの上ない。
ではどうやってUSB-VGA変換デバイスとして認識させるかというと、udevの機能を活用する。
一般的にUSBデバイスはPCと接続されたときにデフォルトのモード等を設定するいくつかのパラメータがあるが、この製品では bConfigurationValue という値に2が設定されているため、これをusb_modeswitch コマンドで強制的に1にしてやる必要がある。
ここではudevのルールファイルを以下のように作成。
user@host: sudo vi /etc/udev/rules.d/00-displaylink.rules
中身はこの一行。
ATTR{idVendor}=="17e9", ATTR{bConfigurationValue}=="2", RUN+="/usr/sbin/usb_modeswitch -v 17e9 -p 0156 -u 1"
前述のとおり、ここに記載してあるベンダIDとプロダクトIDはLCD-USB10XB-Tのもの。lsusbとdmesgを見た上で認識できそうだな、と感じたdisplaylink製品なら、ここで該当のIDに読み替えて記述してやれば動作する可能性が非常に高い。

ルールファイルが用意できたら、Ubuntu 10.10のデフォルト状態ではudevの自動実行が有効になっていないため、sysv-rc-confを使って有効にしてやる必要がある。
user@host: sudo sysv-rc-conf --level S udev on
ここでレベル指定してあるのは理由があって、最初は指定なしのonでもうまく動作していたんだが、Ubuntuのアップデート後にXが/dev/fb1が見つからないと起動エラーを出すようになったため個別指定。
このため、確実に起動するように順序調整をしなきゃかなぁと思って調べていたら、Ubuntuの起動プロセスを解説している記事があったので、これを読んでS固定にしたら解決した。この記事すげーわかりやすいw

参考記事 : wps-C » Ubuntuのinit以降の起動シーケンス(図入り) – upstart /etc/event.d/ initctl

とはいえ、他のUSBポートにフラッシュメモリなデバイスを接続していると、相変わらず/dev/fb1が見つかりません状態になったりもするので、この起動順序に関する部分は引き続き調査が必要かもしれない。
とりあえずは、接続するポートを変えてみたり不要なデバイスは外す等で、何回再起動しても確実に画面表示までもっていける状況を把握しておくのがお勧め。

06 : xorg.confの設定
ここまでの作業で、USB-VGA変換デバイスの認識が正常に行えるようになるので、今度はXから利用出来るようにxorg.confを用意。
Ubuntu 10.10ではxorg.confがデフォルトでは存在しないため、まずは雛形を作成し編集することにする。
雛形の作成にはXorgを使用するが、稼働中のXサーバがあると実行に失敗するので、すでにGUIで作業している場合にはCtrl+Alt+F2でコンソールを切り替えてから作業or俺はこの時点ですでにSSHでリモート作業してた。
user@host: sudo service gdm stop
user@host: sudo Xorg -configure
これで、ホームディレクトリ上にxorg.conf.newというファイルが作成されているはず。
この中身は、自動判別可能な範囲でXの起動に必要なパラメータが記載されている。
今回はマルチディスプレイ環境ではなく、LCD-USB10XB-Tをプライマリかつシングルディスプレイで利用することが目的なので、ゼロから記述するより雛形を編集したほうが早い。
user@host: sudo cp xorg.conf.new /etc/X11/xorg.conf
user@host: sudo vi /etc/X11/xorg.conf
赤字が編集もしくは追加した箇所。
Section "Device"
        Identifier  "Card0"
        Driver      "displaylink"
        Option      "fbdev" "/dev/fb1"
EndSection
Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes     "1024x600"
        EndSubSection
EndSection
ここで肝になるのが、DeviceセクションのdriverとOption。/dev/fb*というのはフレームバッファデバイスで、基本的には画面の出力先として選択可能な数だけ作成されるっぽい。
ちなみに、マルチディスプレイ時にはxorg.confに上記以外の設定が必要となるため、それ用の設定は各自おググりいただきたい。

07 : タッチパネル認識用にGRUB編集
ここまででVGA部分は設定が完了したので、次はタッチパネル部分の設定に入る。
まず、grubの設定ファイルを編集して、起動時のkernelに渡すパラメータを追加。意味はよーわからん。w
user@host: sudo vi /etc/default/grub
もともとGRUB_CMDLINE_LINUX_DEFAULTの行がいるので、コピペした上でコメントアウトしておくと無難。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.noloop=1 usbhid.quirks=0xeef:0x1:0x40"
ここでも、0xeefの部分がベンダID、0x1の部分がプロダクトIDになっている。
編集が完了したら、update-grubで起動パラメータとして有効化してやる。
user@host: sudo update-grub

08 : タッチパネルドライバのおまじない
ここも必要な理由がいまいちよくわかっていないんだが、起動の際のmodprobe時にスキップされるよう、blacklistに追記してやる必要がある様子。
user@host: sudo vi /etc/modprobe.d/backlist.conf
記述場所はどこでもいいみたいだけど、まぁファイル末尾に書いておけば間違いない。
blacklist usbtouchscreen

09 : タッチパネルパラメータの設定
さらに、Xから利用可能となるための設定を入力。
user@host: sudo vi /usr/share/X11/xorg.conf.d/50-egalax.conf
新規ファイルなので手打ち。/etc/X11/xorg.confに書いても動くのかな?試してないw
Section "InputClass"
    Identifier "axix inversion"
    MatchUSBID "0eef:0001"
    Option "InvertY" "On"
    Option "Calibration" "214 3864 269 3853"
EndSection

ここでもベンダID:プロダクトIDの組み合わせが使用されている。
LCD-USB10XB-Tでは、タッチパネルのY軸(上下方向)が反転した値を返すらしく、InvertYを有効にしないとカーソルの追尾が上下反転した状態になってしまった。
また、上記のCalibrationの値は手元の個体でキャリブレーションした結果のものだが、同じ製品なら大幅に食い違うこともないと思われるのでとりあえず入力してみることをお勧めする。
当然、他製品でこの手順を試す場合にはおかしなことになりかねないので、この段階では行自体を削除orコメントアウトしておいた方が無難。

10 : 設定反映
以上がデバイスの認識からX上で利用可能になるまでの作業。いよいよ満を持して再起動!
user@host: sudo reboot
設定がすべて正しければ、起動中のUbuntuロゴ表示時に描画先モニタがオンボードVGAからLCD-USB10XB-Tに切り替わり、1024x600の解像度で見慣れたXの画面が表示されるはず。
何か入力ミスや環境によるパラメータの違いなどが発生し正常に起動できない場合、作成したファイルを一時的に他のディレクトリに退避したり編集箇所をコメントアウトし、順番に障害発生箇所を探っていく地道な作業が待っている。
(この記事の内容を検証するために2週間ほどかけて、5,6回はクリーンインストールしてやり直したのは内緒)

11 : キャリブレーション
めでたく正常に画面表示まで漕ぎ着けたら、最後にキャリブレーション。
使用するのはxinput_calibratorで、これもUbuntuのリポジトリには見当たらないので手動でダウンロードしてやる必要がある。
user@host: wget "https://launchpad.net/~tias/+archive/xinput-calibrator-ppa/+buildjob/1961544/+files/xinput-calibrator_0.7.5-1ubuntu1_amd64.deb"
user@host: sudo dpkg -i xinput-calibrator_0.7.5-1ubuntu1_amd64.deb
なお、上記URLのファイルは64bit版なので、32bit版のUbuntuを使っている場合は別途おググりいただきたい。
xinput_calibratorのインストールが完了したら、メニューバーのシステムメニュー内Calibrate Touchscreenを選択するか、X上の端末ウィンドウから実行。
user@host: xinput_calibrator
画面上にポインタガイドが表示されるので、順にタッチすることでキャリブレーションできる。
LCD-USB10XB-Tは抵抗膜方式のため、付属のスタイラスを使った方が精度的にもお勧め。
キャリブレーションが完了すると、測定値が端末ウィンドウに表示されるので、この値を
 /usr/share/X11/xorg.conf.d/50-egalax.conf のCalibration行にいれてやれば作業完了。
念のため再起動してから、自己満足に浸ってください。w

ただ、一点問題があって、このディスプレイというかdisplaylink搭載製品全般っぽいんだけど、どうも輝度コントロールをソフトウェアから制御できない様子。
Windowsマシンにつないでも変更できなかったし、xrandrでガンマ値の変更をしても反映されなかったし。
USB接続ディスプレイの多くが、本体側に輝度調節用の物理スイッチを搭載しているようなので、そもそもそういう仕様なんじゃないか疑惑。

2011-03-07 12:25:55投稿者 : 隼人
この記事のURL コメント(0) トラックバック(0) nice!

from Twitter

そろそろ寝ないと明日がまずいのでshutdown (04:49:01)


gdbの使い方でも毎度Google先生のお世話になる。 (16:25:33)



2011-02-11 00:00:10投稿者 : PetitPandaExtreme
この記事のURL コメント(0) nice!

from Twitter

いよいよ新宿もみぞれってきますた (00:45:57)


そりゃ大ヒット生み出せるタイプじゃないけどさ。: hayato2rockさんはゲームメーカーだと『「スパイク」タイプ。体を動かすことやドライブが好きなアウトドア派。喧嘩や辻斬りや暗殺に巻き込まれやすいようです。』 http://shindanmaker.com/86620 (01:50:46)


今週末の連休は雪なのか。うへぇ (13:20:10)


覚える気ないんかな。 (16:28:23)


ごはん残したけどやっぱり食べ過ぎた。あの蕎麦屋唯一にして最大の難点なんだよなぁw (16:52:49)


CM見て気になってたけど、全然店頭で見かけなかったのにようやく遭遇! http://plixi.com/p/75934383 (22:57:53)



2011-02-10 00:00:04投稿者 : PetitPandaExtreme
この記事のURL コメント(0) nice!