ラベル Ubuntu の投稿を表示しています。 すべての投稿を表示
ラベル Ubuntu の投稿を表示しています。 すべての投稿を表示

2014年9月25日木曜日

UbuntuのXディスプレイをSSHからパワーセーブ解除する

こんなことやりたい人がいるかわかりませんが、XディスプレイをSSHからパワーセーブしたり、パワーセーブを解除したりする方法について。

通常、Xディスプレイを操作するにはxsetを使います。SSHから操作する場合もこれは変わりませんが、そのままのコマンドでは、SSHコンソールがグラフィカルウィンドウではないため、所望のXディスプレイを特定して操作することができません。したがって、-displayウィンドウを使ってXディスプレイを指定してやる必要があります。

-displayオプションに指定すべきサーバー名をうまいこと調べる方法がぐぐってもなかなか見つからないんですが、たぶん一番簡単にできるのは、当該のディスプレイ側で仮想コンソール(Xtermなどのターミナルソフト)を開いておいて、wコマンドを打つ方法です。wはSSHからでもOKです。
ここでFROMにある:0とかがXディスプレイのサーバー名です。

あとxsetコマンドがない場合は下記でパッケージインストールします。
まずは、パワーセーブを解除して復帰させるコマンド。
次に、指定時間でパワーセーブに入らせるコマンド。
タイムアウトを秒単位で指定できます。
すぐにオフにしたい場合は、
それからデフォルトのタイムアウト時間を指定しておきたい場合は、 /etc/X11/xorg.conf.d/の下にconfファイルを作っておく。
ServerLayoutセクションのOptionエントリで、"0"を指定するとその機能が無効、それ以外の数字を指定した場合は、分単位でタイムアウト時間が設定される。
この場合、1分でディスプレイがオフになる。あとMonitorセクションのOptionでDPMSを有効にしておく必要があるようです。

Raspberry PiにつないでいるUSB接続のDisplayLinkモニタをセンサー入力でオンできないかなー、なんてのが動機ですが、そこまでやるかは気分次第。


参考

Display Power Management Signaling (日本語) - ArchWiki
A Primer on Screen Blanking Under Xorg - Shallowsky.com
list existing X display names? - Ask Ubuntu

2014年5月20日火曜日

ウェブカメラのフォーカス

新しいウェブカメラを買いました。LogicoolのC920t。実勢で一万円ほどする高級ウェブカムですよ。Raspberry PiとかUDOOとかのARMシングルボードコンピュータとつなげて遊ぶウェブカムとしては、もともと持っていたバッファローのBSW32KM01Hを使っていたんですが、最近マクロ寄りの距離でタイムラプスを撮りたいとこっそり妄想していて、それができそうなウェブカムを探していたのです。
C920tは価格.comのWebカメラランキングでも上位にあるのですぐにアンテナにかかりましたが、決め手は
  • 最短7cmのとってもマクロな焦点距離
の他にも、
  • UVC対応
  • ハードウェアH.264エンコード
  • 海外のウェブカムハックでよく話に挙がっている
  • 三脚雲台ネジ穴
といったところがあります。ついでに言うと、「カールツァイスレンズ搭載」というのもこの製品の売りだそう。

さっそくボードにつないで実験してみるわけですが、ARMボードでの使用となれば、早々簡単にはいかない。uvccaptureで静止画撮影してみたんですが、Raspberry Piで撮るとやけに暗いし色もおかしい。UDOOだとそれなりにきれいに撮れるのに。uvccapture -vで調べてみた結果、BrightnessContrastSaturationGainの設定がおかしくなっていた。uvccaptureのソースを読んでみると、コマンドラインから前記のパラメータが指定されていない場合、v4l2ドライバへのioctlコールでパラメータリセットがかかる。そうなると、これがRPi固有の問題か、他のカーネルでも同じかわかんないけど、おかしな設定になってしまう。あとuvccaptureのソースを読んだついでに書いておくと、前記パラメータに0を指定すると無視されてリセットがかかり、やはりおかしな初期値が使われる。これはさすがにバグだと思う。

さて、UDOOを参考に
  • Brightness: 128
  • Contrast: 128
  • Saturation: 128
  • Gain: 1
で、RPiでもそれなりに素敵に撮れるようにできた。

でもまだ問題が残る。フォーカスである。

カメラの前に被写体として瓶を置いて撮ってみるものの、ピントが合ってない。さてどうしたものかと思っていろいろいじっていると、v4l2-ctlでフォーカスの設定ができそうなことに気づく。
$ v4l2-ctl --list-ctrls
...
                 focus_absolute (int)    : min=0 max=250 step=5 default=8189 value=0 flags=inactive
                     focus_auto (bool)   : default=1 value=1
...
これが使えるとしたら、UVCもなかなか気が利く。

まずはオートフォーカスをオフに。
$ v4l2-ctl --set-ctrl focus_auto=0
次にfocus_absoluteという値をいじってみる。今の設定値は
$ v4l2-ctl --get-ctrl focus_absolute
focus_absolute: 0
なので、ここから少しずつ刻みながら画像を確認してみる。
$ v4l2-ctl --set-ctrl focus_absolute=0
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus00.jpg
$ v4l2-ctl --set-ctrl focus_absolute=10
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus10.jpg
$ v4l2-ctl --set-ctrl focus_absolute=20
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus20.jpg
$ v4l2-ctl --set-ctrl focus_absolute=30
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus30.jpg
$ v4l2-ctl --set-ctrl focus_absolute=40
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus40.jpg
$ v4l2-ctl --set-ctrl focus_absolute=50
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus50.jpg
$ v4l2-ctl --set-ctrl focus_absolute=60
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus60.jpg
で、結果が下の画像。なおカメラから被写体までの距離は、チポトレソースが約10cm、シナモンシュガーが約20cm、ボトルのビールが約30cmです。(ちなみにこれらはアメリカのトレーダージョーで買い漁ってきた物。)

focus_absolute=0
focus_absolute=10
focus_absolute=20
focus_absolute=30
focus_absolute=40
focus_absolute=50
focus_absolute=60
撮影風景↓

まずfocus_absoluteに関してわかるのは、値が小さいほど無限遠側、大きいほどマクロ側のフォーカスとなること。それから10~30cm程度の近距離の被写体をうまく収める設定値はなさそう。10~40あたりの範囲で好みを調整するといいかもしれない。

オートフォーカスのときにどういう測距点を使っているのかわかりませんが、ちゃんと撮りたければマニュアルで設定してあげるほうがよさそうです。

2014年5月13日火曜日

MEncoderで動画変換

streamerコマンドを使って、Linuxコマンドラインでウェブカメラ録画をしてみた(関連記事)けど、うまいことエンコードできず無圧縮AVIのまま保存していたので、ファイルサイズがすごく大きい。

そこで、あとからでも圧縮できないかと思ってちょっと調べてみたところ、とりあえずMEncoderを使ってMPEG2にできた。

mencoderがインストールされていなければ、まずはインストール。
$ sudo apt-get install -y mencoder

で、AVI→MPEG2の圧縮が
$ mencoder input.avi -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video  -oac copy -o output.mpg
でできた。元ファイルが320x240/10fpsの10秒のRGB24で約24MB、圧縮後が約820kBなので、だいたい1/30になった。

H.264とかもできたらいいなー。オプションとかいろいろ調べてみよう。

参考

Chapter 6. Basic usage of MEncoder - MPlayer - The Movie Player

ホワイトバランス設定してウェブカメラ録画

Linuxのコマンドラインでウェブカメラを使った動画撮影をする方法を昨日書いたんですが、若干ホワイトバランスが要調整という感じだった。ので、ホワイトバランス設定してから撮影する方法。

v4l2-ctlというツールを使います。インストールされていなければ
$ sudo apt-get install v4l-utils
でパッケージをインストール。

で、まずホワイトバランスを含め設定可能なパラメータの一覧を表示。
$ v4l2-ctl --list-ctrls
                     brightness (int)    : min=-64 max=64 step=1 default=0 value=0
                       contrast (int)    : min=0 max=64 step=1 default=32 value=32
                     saturation (int)    : min=0 max=128 step=1 default=67 value=67
                            hue (int)    : min=-40 max=40 step=1 default=0 value=0
 white_balance_temperature_auto (bool)   : default=1 value=1
                          gamma (int)    : min=72 max=150 step=1 default=110 value=110
                           gain (int)    : min=0 max=80 step=1 default=0 value=0
           power_line_frequency (menu)   : min=0 max=2 default=2 value=2
      white_balance_temperature (int)    : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactive
                      sharpness (int)    : min=0 max=6 step=1 default=3 value=3
         backlight_compensation (int)    : min=0 max=2 step=1 default=1 value=1

現在の設定値の取得は
$ v4l2-ctl --get-ctrl white_balance_temperature
white_balance_temperature: 4600
オートホワイトバランスのON/OFF確認なら
$ v4l2-ctl --get-ctrl white_balance_temperature_auto
white_balance_temperature_auto: 1
でできる。

実際にホワイトバランスを設定してみる。オートホワイトバランスを切る必要があるので、white_balance_temperature_auto=0を入れる。で、色温度最低は
$ v4l2-ctl --set-ctrl=white_balance_temperature_auto=0,white_balance_temperature=2800
色温度最高なら
$ v4l2-ctl --set-ctrl=white_balance_temperature_auto=0,white_balance_temperature=6500
で設定できる。

あとは昨日書いた下記のコマンドで撮影してみると、違いがわかります。
$ streamer -c /dev/video0 -o test.avi -t 0:10 -s 320x240 -f rgb24

参考

Webcam settings on Ubuntu and Fedora Linux CLI from terminal - TechyTalk.info

2014年5月12日月曜日

Linuxコマンドラインでウェブカメラ動画撮影の実験

Raspberry PiのようなARMボードでも、x86マシンでも何でもいいんですが、ウェブカメラで動画撮影しようとして調べると、streamer、mencoder、gstreamer、v4l2-ctl、ffmpeg(avconv)などなど、いろんなツールがあるっぽい。ちょろっと試してみた結果、streamerでとりあえず録画できるやり方があったので、とりあえずメモ。
$ streamer -c /dev/video0 -o test.avi -t 0:10 -s 320x240 -f rgb24
avi / video: 24 bit TrueColor (LE: bgr) / audio: none
rate: queueing frame twice (18446511) -0.00s [0]
...
ただし、このコマンドだと無圧縮AVIになるので、すごくストレージ容量を食う。320x240サイズの10fpsが10秒で25MBくらい。より大きな解像度、高いフレームレート、長い時間で、と考えたら、おそろしいことに。
そこでstreamerのヘルプを見ると
$ streamer -h
...
movie writers:
...
  avi - Microsoft AVI (RIFF) format
    video formats:
      rgb15   15 bit TrueColor (LE)        [avi]
      rgb24   24 bit TrueColor (LE: bgr)   [avi]
      mjpeg   MJPEG (AVI)                  [avi]
      jpeg    JPEG (JFIF)                  [avi]
...
ということなのでMJPEGを試してみるんですが、
$ streamer -c /dev/video0 -o test.avi -t 0:10 -s 320x240 -f mjpeg
avi / video: MJPEG (AVI) / audio: none
no way to get: 320x240 MJPEG (AVI)
movie writer initialisation failed
となってしまう。何が足りないのかな。。
あとホワイトバランスも直さないとな。

なおウェブカメラの設定可能な解像度は下記コマンドで確認可能。
$ uvcdynctrl -d video0 -f

2014年2月21日金曜日

UDOOのUbuntuでネットワークに接続できない

ちょっと前にUDOOのWi-Fiモジュールを使ってワイヤレス接続するように設定したんですが、その後、なぜかLANケーブルをつないでもPCからSSH接続ができなくなった。とりあえずワイヤレスでSSHログインしていろいろ調べてみると、DHCPでIPアドレスが取れてない。どうやら/etc/network/interfacesの設定がおかしくなってたっぽい。

UDOOのUbuntuでデフォルトの有線インタフェースのデバイス名はeth2なので、
$ sudo vim /etc/network/interfaces
auto eth2
iface eth2 inet dhcp
の2行をを追加した上で、
$ sudo ifdown eth2
$ sudo ifup eth2
として反映してやると、有線でも接続できるようになりました。

2013年2月7日木曜日

Raspberry PiでAndroid

とりあえずプレビルトのAndroidイメージをRaspberry Piで走らせてみます。

環境はLubuntu 12.10 32bitです。

1. イメージのダウンロード


wikiaAndroid Pi Wikiのページから、 CyanogenMOD 7.2イメージをダウンロード。

2. 解凍


7zファイルを解凍。コマンドのインストールはこちらを参照。

3. SDカードへの書き込み

2GB以上の容量があるSDカードを用意して、USBのカードリーダーとかで接続します。
ddコマンドを使ってimgファイルを書き込みますが、書き込み先のデバイスファイルは、dfコマンドとかdmesg | tailとかを使って確認しておいてください。私の環境では/dev/sdcでした。

4. 起動


イメージを書き込んだSDカードをRaspberry Piに挿し、HDMIで画面接続します。microUSBを接続すると電源が入り、起動します。





あとはキーボードとマウスとEthernetをつなげて夢が広がるというわけです。


Linuxで7zファイル(7zip)を解凍する

最近、仕事でも7z圧縮のアーカイブをもらうことがよくあります。WindowsならLhaforgeとかで解凍できますね。

Laspberry PiにAndroidを載っけようと思ってこちらのサイトを見ていたら、イメージが7z圧縮で配布されてるんですね。tar.bz2とかじゃなく。まぁWindowsマシンにダウンロードして解凍したあと、Win32 Disk ImagerとかでSDカードに焼いてもいいんですが、せっかくなのでLinuxでの解凍方法を調べました。

といっても、手順はいたって簡単です。以下、Lubuntu 12.10での手順です。


で、


これだけ。

eオプションは解凍(Extract)の意味です。圧縮(Archive)はa。

参考情報


How to use 7zip on Linux command Line

2013年2月4日月曜日

Lubuntuでvncサーバーを立ち上げる

私はWindowsをメインで使ってますが、遊びでいろいろビルドする用途でLinuxマシンも一台動かしています。安価なMini-ITXのオンボードCPUマシン、ASUSのC60M1-Iに、Ubuntu派生の軽量LinuxディストリビューションのLubuntu 12.10を入れて使ってます。マシンごとにマウスとキーボードを用意するのは厄介なので、もちろんSSL接続。でも、デスクトップにオートアップデートのダイアログが出てくることもあるので、それだけではいまひとつなときもあります。

そこでLubuntuにvncを入れたので、メモっておきます。

1. パッケージのインストール



2. パスワードの設定



3. ファイアウォールのポート開放


必要に応じて、

などでポート開放。使用している環境に応じた方法で設定してください。

4. 起動


実際に、WindowsマシンからTightVNCなどのvncクライアントを使ってアクセスしてみましょう。

5. 自動起動設定

上記コマンドをしなくても、マシンが起動したときに自動的にvncサーバーが立ち上がるように設定します。まず、

など、エディタで開き、ファイル末尾に下記を追記します。

これで再起動してもすぐvnc接続ができるようになります。


参考情報


Setup VNC Server for Lubuntu