なんとなく

誰得感満載な記事が多いかも。Mono関係とLinuxのサーバ関係、レビューとか。

Raspberry PiをThin Clientとして使おうと思って(xfreerdpのコンパイル)

はじめに

Raspberry PiからWindows8 Proのマシンにxfreerdpを使ってリモートデスクトップで接続しているのだけど、うまくいかないところがあって使いづらくて気持ち悪かったので最新版をRaspberry Pi実機でコンパイルしてみましたよって話。

Raspberry Pi Type B 512MBMicrosoft Windows 8.1 Pro



使いづらくて

Rasbian(wheezy)にインストールされているxfreerdpを使い始めて、以下の3点で使いづらさを感じていた。

  • 日本語キーボードがうまく認識されない点
  • フォントのスムージングができていない点
  • 音の再生がうまく実装できていない点
日本語キーボードがうまく認識されない点

ローカルでWindows8にログインして、そのセッションを使用するとキーボードがある程度うまくいくのだけれど、ログインしていない状態でリモートから接続すると英語キーボードのままになってしまって、配列が変わるし、日本語変換できなくなるし、非常に効率が悪かった。

フォントのスムージングができていない点

また、フォントのスムージングについても設定ができなかったので、気持ち悪かった。

音の再生がうまく実装できていない点

音についても倍速再生みたいな面白い感じになってしまってとても聞けたものではなかった。

ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred

というエラーが出た、どうやらalsaのキャシュが追いつかなくなって再生位置が狂うようだ。

ちなみに音のハードウエアの状況を確認すると以下のようになっていた。

$ cat /proc/asound/card0/pcm0p/sub0/hw_params
access: RW_INTERLEAVED
format: S16_LE
subformat: STD
channels: 1
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768

ステレオなはずだけど。。。なんだろう?

上記のような理由で、Raspberry Piからのリモートデスクトップを効率よく使用できる環境にしたい、Raspberry Piがいわゆるシンクライアントにならないかなぁと考えて、最新版をgithubよりcloneしコンパイルし、最新版を使用してみることにした。

新しいのにしちゃえ

コンパイル

詳しくは
https://github.com/FreeRDP/FreeRDP/wiki/Compilation
を参照してほしい

ソースの取得

$ git clone git://github.com/FreeRDP/FreeRDP.git
$ cd FreeRDP

debianでの必要なパッケージの取得

$ sudo apt-get install build-essential git-core cmake libssl-dev libx11-dev libxext-dev libxinerama-dev \
  libxcursor-dev libxdamage-dev libxv-dev libxkbfile-dev libasound2-dev libcups2-dev libxml2 libxml2-dev \
  libxrandr-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev

最新版をコンパイルするためにさらに必要なパッケージの取得

$ sudo apt-get install libavutil-dev libavcodec-dev

Makefileの作成
Raspberry Piの実機でコンパイルするのだが、前に設定したdistccによる分散コンパイルをする

$ CC=distcc cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_SSE2=OFF -DWITH_NEON=OFF

distccで使用するサーバを環境変数に設定

$ export DISTCC_HOSTS="localhost 192.168.11.7 192.168.11.6"

make

$ CC=distcc make -j4

make install
なお、debianのパッケージでxfreerdpをすでにインストールしている場合は、予め削除しておく。

$ sudo make install
確認

コンパイルし、インストールできたので確認をする

どうやら、以前のバージョンとは引数が変わったようだ。
以前は

$ xfreerdp -k 0x00000411 -g 1600x1024 -u ユーザ名 -x l -z --disable-wallpaper --disable-full-window-drag --disable-menu-animations --disable-theming --gdi hw --plugin rdpsnd --data alsa -- --plugin drdynvc --data tsmf:decoder:ffmpeg -- --plugin cliprdr サーバのIPアドレス

としていたが、

$ xfreerdp /u:ユーザ名 /size:1600x1024 /v:サーバのIPアドレス -themes -wallpaper /gdi:hw +clipboard +fonts /sound:sys:alsa /multimedia:decoder:gstreamer

のように変わった

日本語キーボードの認識については、セッションが張られていない状態でもうまく認識できるようになった。
半角/全角キーを押すとIMEが普通に反応する。

fontのスムージングについては、+fontsオプションを付与することでスムージングが音になり、見やすさが格段に上がった。
汚くなくて、心地が良い。これほど、スムージングが影響するのかと思ったぐらい。

音であるが、、、githubのissueリストを覗くと対応はされているようだが、完全ではないようだ。
前に比べるとほんの少し安定したように思えたが、
ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred
というエラーが出るし、聴くに耐えない感じだ。

改善された?
  • 改善された点
    • 日本語キーボードはうまく認識された
    • フォントのスムージングができた

上記2点が改善されたのでRaspberry PiをThin Clientとして普通に使えるようになった。

  • 改善されなかった点
    • 音の再生がうまく実装できていない点

Raspberry PiでFlashは稼働させるのが無理なので、Music Unlimitedが聞きたかったところだが、代替の音楽は音楽サーバに上がっており、Raspberry Piから直セスアクセスできて、ローカルで再生できるので我慢できる。

まとめ

fontのスムージングが自分自身のやる気とか使う気とかに、結構な割合で影響を与えていることに気づいた。
また、xfreerdpを新しいものにして、Raspberry PiがThin Clientとして、十分にその機能を発揮できることも確認できた。
このブログを書いているのもRaspberry Piからリモートデスクトップで接続してである。