USBデバイスを接続したまま取り外した状態にしたい

KindleをPCに接続すると自動的に USBドライブモード に切り替わってしまい、充電しながらの操作ができなくなる。 Windowsでは ハードウェアの取り外し 的な操作をすればいいのだけれど、それってLinux(CLI)でどうやるの?というお話。

まず接続した状態でdmesgを確認する。

$ dmesg
[1483324.916878] usb 3-2.1: new high-speed USB device number 79 using xhci_hcd
[1483325.003399] usb 3-2.1: New USB device found, idVendor=1949, idProduct=0324
[1483325.003405] usb 3-2.1: New USB device strings: Mfr=0 ...
more ...

RaspberryPiでffmpegをビルドしてハードウェアデコーダ/エンコーダを試す

RaspberryPiでffmpegのMPEG2のハードウェアデコーダ(mpeg2_mmal)と、H.264のハードウェアエンコーダ(h264_omx)を使ってみたかったので試してみました。 が、aptでインストールできる3.2.10でmpeg2_mmalを使ってデコードすると解像度が320x240に固定されてしまうというバグを 見事に踏み抜いてしまったので結局自分でビルドすることになりました。

3.2.10で ERBラボのサンプルストリーム パケットサイズ188バイト版 をエンコードしたログ

$ time ffmpeg -fflags +discardcorrupt -c:v mpeg2_mmal -i isdbt188.ts -t 00:00:10 -c:a copy -bsf:a aac_adtstoasc -c:v h264_omx -b:v 4096k isdbt188.mp4
ffmpeg version 3.2 ...
more ...

RaspberryPi ZeroをOTGモードで使う

RaspberryPi Zeroに USB Stem を 取り付けてみました。

取り付けとRaspbianの準備に関しては PIMORONI と そこからリンクされている 公式Gist を参考にすれば簡単にできました。

Macで使う場合は、ドライバも必要ないしBonjourも動作しているのでなんの準備も必要なくSSHでつなぐことができました。 インターネット共有の設定をすればインターネットへ接続するのもOK。

ただ自分のLinuxの環境はGentooなのでドライバも無効になっていたし、Avahiも入っていなかったので少しハマりました。 まずカーネルの設定で CONFIG_USB_NET_CDCETHER を有効にするとRaspberryPiを認識できるようになります。

Device Drivers  --->
  Network device support  --->
    USB Network Adapters  --->
      Multi-purpose USB Networking Framework
        CDC Ethernet support (smart devices such as cable modems)

有効にした上で接続するとdmesgとifconfigにこのように出力されます。(なんかエラーでてるけど…)

$ dmesg
[ 1450.001875] usb 3-1 ...
more ...

Linuxで複数モニタを使うときのメモ

以前買った IGZO液晶 はたまにRaspberryPiを接続したり、 臨時のモニタとして活躍していました。ただ、最近活躍の機会もあまりないのと、 小画面で常時表示しておきたいような用途を思いついたのでデスクトップPCのサブモニタとしてしばらく使ってみることにしました。

デスクトップPCのマザーボードは H77M-ITX を使っていて、 既存のモニタはDVI経由で接続しています。 このマザーボードはDVIとHDMI両方を使ってのマルチモニタに対応しているので、素直にHDMIに接続すれば物理的な準備は終わり。

ただ縦長の解像度が問題なのか、一般的なモニタを接続した場合も同じなのかはわからないけれど、 両方のモニタを接続しているとBIOSの画面が表示されなくなりました。 (キーを押すと入れはするけれど画面の表示がされない状態) その為BIOSに入る必要がある時はIGZO液晶側の電源を切るかケーブルを抜いておく必要がありました。

次にLinux側の対応で、やりたいことは以下の3つ

  • ミラーリングになっていたのでそれぞれ別に使えるようにする。
  • 今まで使っていたモニタを今まで通りメインのモニタとして使う。
  • IGZO液晶はポートレート表示がデフォルトなので回転させてランドスケープで使う。
  • IGZO液晶はメインモニタの左側に配置する。

調べてみたら設定を変更するにはxrandrを使って動的に変更するかxorg.confに静的に書くかの2通りがありました。

その他にディスプレイマネージャにSLiMを使っていたのですが、 もう 開発が止まっているらしい のとマルチモニタに対応していないみたいなので、 LigntDM に置き換えました。 ウインドウマネージャは Awesome でこちらは対応していて特に設定の必要なく使えました。

xrandrを使うにしろ、xorg.confに書くにしろ、まずLinux側にどのように認識されているか調べる必要があります。 単純にxrandrコマンドを実行すれば現在の状況が確認できました。

$ xrandr
Screen 0: minimum 8 x 8, current 3840 x ...
more ...

秋月電子で買えるIGZO液晶を試してみた

秋月電子で SHARPの7インチIGZO液晶モジュール を購入したらあっという間に届いたので動作確認してみました。 動作確認自体は土曜に終わっていて、本当はアクリルのケースを作成してから記事を書くつもりでした。 が、月曜の夜に見積もり依頼を出して既に木曜の深夜です… メールには2営業日と書いてあったのに何が起きているんだろうなぁと少しイラッときたので先に記事だけ書いてしまうことにしました。 (ちなみに今日くらいから シリコンハウスでも購入できる みたいですね。)

組み立てと接続に関しては付属の説明書を参考にすれば特に問題なく済ませることができると思います。 注意すべきことがあるとすれば、細い方のフレキシブルケーブルのコネクタは、開く方向が太い方とは逆になっていた点くらいです。 あとは単純に壊さないように作業するだけです。(すごく壊れやすそうなので何度も作業したくない感じでした。)

映像の出力機器に関して、とりあえず普段使用している MiniDP-HDMI変換ケーブル を使ってMBAと接続してみたのですが無反応でした。 次にGentooがインストールされているデスクトップと DVI-HDMI変換ケーブル を使って接続してみたら、こちらはうまく表示されました。 MBAが悪いのか、変換ケーブルが悪いのかは切り分けることができていませんが多少相性はあるようです。 Twitterでも報告している人がいましたが接続する機器によっては映らないということがわりと当たり前に起こりそうです。こわいですね。

下の画像はデスクトップに接続して画面を左に90度回転した状態で撮影したものです。 この液晶の仕様でデフォルトでは縦画面の1200x1920で認識されるようです。 なので、横向きで使用したい場合はOS側で画面を回転させてやる必要があります。 (この仕様のせいでおそらくPC以外の機器との接続が難しくなっているのだと思われます。)

Gentoo(Linux)のXでは xrandr というコマンドがあり、これを利用すると画面を回転させることができます。 今回はこのように xrandr -o left 実行しました。

image

アクリルケースに関しては、本当はCADやIllustratorを使用して書くのかもしれませんが、木材を使った家具のイメージ作りのために SketchUp を使っていて ...

more ...

WN-G300UAを使ってみる

今までWiFiのアクセスポイントには WLI-UC-GNM を使用していたのですが、たまにOSごと巻き込んでクラッシュするのとアンテナがないので電波が悪い部屋があったので交換してみることに
アンテナがついている機種でLinuxでの動作実績がありそうなものを探した結果 WN-G300UARaspberryPiでの動作実績もあるみたい で良さそうだったので購入してみました
ちなみにWLI-UC-GNMは772円、WN-G300UAは1470円でした
上述の参考サイトにはモジュールのオプションでパワーマネージメントを無効にすれば普通に動くということだったのですが、これから色々ハマるとは思いもしませんでした…

  • このデバイス用のドライバがカーネルに含まれていますがまともに動作しませんでした (繋がるけれどすぐ切れるという動作 Kernel 3.14.48)
  • チップセットメーカーもドライバを提供していて参考にしていたサイトではそれを使うように説明がありました
    しかし手元のカーネルではビルドすらできませんでした
    参考にしていたサイトはRaspberryPiを使ったサイトが多かったのですが、彼らの使用しているカーネルは古かったようです

いろいろ検証した結果ArchLinuxのパッケージで使われているリポジトリとパッチを当てたものを使用すれば動作することがわかりました
Arch以外のディストリビュージョンではそのままビルドすることができないのでArchで使っているリポジトリをサブモジュールにしてMakefileとWN-G300UA用のパッチを追加したリポジトリを作成しました

以下の手順でビルドすることができます

$ git clone https://github.com/lostman-github/8192cu
$ cd 8192cu
$ git checkout WN-G300UA
$ git submodule init
$ git submodule update
$ make
$ cd -

$ git clone ...
more ...

Xvfb上でChromeを動かしてみた

外出中にFlashを使ったサイトをチェックしたいという要望が某所から出てきたので環境を作ってみた
普段から PC を持ち歩いている人には必要ないことかもしれないけれど普通の人は持ち歩いていないよね
私も荷物を持つのが嫌いなのでポケットに入るスマホと財布くらいしか持ち歩いていないです
ということで、スマホで見れるといいけれど Android の Firefox で使える Flash はもうサポートが切れているのでいまいちな感じ
で、自宅には常時起動のマシンがあるのでそこで何か用意できないかなと考えて今回 Xvfb を試してみた

Xvfb はなにかというと通常 X はクライアントからの要求を受けてドライバを経由して実際のモニタに描画するのに対し、
モニタでなくメモリ上に確保した仮想のフレームバッファに画面を描画します
このため画面がないマシンでも GUI のアプリケーションが起動できます
サーバ上で GUI のアプリを動かすにはうってつけですね
ただこのままだと外部から描画された画面を見ることができないので
x11vnc を使って外部から画面の様子をVNCクライアントを使って見れるようにしました
Chrome を選択したのは Flash を動かすのに追加でプラグインが必要ないためってだけ

必要なものをインストールする前に package.use に必要は USE フラグを追加して

app-text/ghostscript-gpl cups
media-fonts/ja-ipafonts X
net-libs/libvncserver threads ...
more ...

SketchUpをWineで使う

SketchUp を Mac にインストールして使用していたのですが、 Mac のタッチパッドだといまいち操作性が良くありませんでした
大画面でマウスを使って操作したかったのでデスクトップの Linux マシンにインストールしてみました
SketchUp は Linux 版が提供されていないので Wine を使用することになります (公式の FAQ にもしれっと記述があった
WineHQ にも SketchUpのWikiページ があり情報がまとめられています
ただ多少ハマった部分があったのでやったことを残しておく

まず 公式サイト からインストーラを入手する
自分がダウンロードしたのは SketchUpMake-ja-x64.exe だった
インストール後にバージョンを確認したら 15.3.331 64ビット となっていた

デフォルトの Windows XP だとバージョンチェックで起動できないので winecfg を起動して Windows 7 へ変更する
インストールするディレクトリを変えたい場合は WINEPREFIX 環境変数を使ってwine関係のコマンドを実行する
(デフォルトでは ~/.wine ...

more ...

操作ミスでファイルを消してしまった時の復活方法

ファイルサーバのデータを整理中に rm *hoge* と入力しようとして rm * まで入力した状態で
hogeをコピペで貼り付けようとしました
この時hogeの先頭に改行が含まれていたため、 rm * が実行されてしまい
カレントディレクトリ内のファイルを全て削除してしまいました、事故です
このような場合、 extundelete というソフトを使うと復活できるみたいなので、試してみました

まず削除してしまったファイルがあるボリュームをroでマウントしなおします
この作業はできるだけ早く行う必要があります
自分の場合、別のプロセスがこのボリュームに書き込みをしていたので
削除したファイルのinodeが再利用されてしまいかなりのファイルを失いました

# mount -o remount,ro /mnt/lvm

次にdateコマンドで操作ミスが発生した時刻の確認をします

$ date +%s
1413993600

extundeleteで復活させます
復活できなかったファイルが以下のようにログに出力されて
復活できたファイルはカレントディレクトリの RECOVERED_FILES 以下に出力されます

# extundelete --restore-all --after 1413993600 /dev/mapper/vg0-lv0
Only show and process deleted entries if ...
more ...

Windows10を試してみた

Windows10 Technical PreviewがでたのでKVMにインストールしてみた
このサイトにLinuxからアクセスすると「お使いのオペレーティング システムにはプレビュー版をインストールできません。」と
表示されるがUserAgentをIEに変更してから再度アクセスしたらダウンロードすることができた

QEMUはひさしぶりなので使い方を忘れていたんだけれど以下のようにすることで特に問題なくインストールして動作させることができた

$ qemu-img create -f qcow2 windows10.img 32G
$ qemu-system-x86_64 -enable-kvm -cpu host -hda windows10.img -cdrom Windows10-en-x64.iso -boot d -m 4G

ただ電源の切り方がWindows8.1から更に変更されているので少し戸惑った

Windows10 with KVM

more ...