Fuse4Xでのデフォルトボリューム名を変更する(OSXFUSEも)

Mac OS X Lionではmacfuseがサポートされなくなってしまったので、代わりにMacPortsではFuse4Xが使われている。
Fuse4Xになってから、sshfsなどでマウントするとデスクトップに現れるマウントボリュームの名前がちょっと情報不足で不便だ。例えば"Fuse4X Volume 0 (sshfs)"などとなる。
このページの説明に従って、マウント時に"-o volname=hoge"とかすれば自分で指定できるのだが、それもそれで面倒だ。
そこで以前のように自動でわかりやすい名前になる方法を探ってみた。

MacPortsのfuse4xのソースを少しだけいじりビルドし直すという方法で解決した。
まず、MacPortsでバイナリ共有をしている人は共有サーバー側であらかじめfuse4xを削除しておこう。でないと、コンパイル済みバイナリが再度インストールされてしまう。

強制的にfuse4xをアンインストールする。

sudo port -f uninstall fuse4x

fuse4xをパッチを当てた状態まで展開

sudo port patch fuse4x +universal

fuse4xのソースが展開されているディレクトリへ移動

cd $(port dir fuse4x)/work
cd fuse4x-*

修正すべきソースファイルをrootで開く

sudo -e ./lib/mount_darwin.c

開いたら、以下の様な内容の部分を探す。

if (!*opts.fuse_args.volname)
	snprintf(opts.fuse_args.volname, MAXPATHLEN, "fuse4x volume %d (%s)", device_no, getprogname());

どうやら、opts.fuse_args.volnameがボリューム名になるらしく、これをいじくれば良い。
この部分の少し上にfsnameというのがあり、わかりやすい名前になるのでそれに書き換える。

snprintf(opts.fuse_args.volname, MAXPATHLEN, "%s", opts.fuse_args.fsname);

マウントパス名にしたければ

const char* const mntname = strrchr(opts.fuse_args.mntpath, '/');
snprintf(opts.fuse_args.volname, MAXPATHLEN, "%s", mntname+1);

とか。

書き換えたら、ビルドとインストールを行う。

sudo port install fuse4x +universal

このおかげでボリューム名はだいぶわかりやすくなった。
パッチとして作ればよかったかもしれないが、よくわからなかったので手動編集の方法を紹介した。

OSXFUSEの場合 (2014/06/11 追記)

基本は同じ

sudo port -f uninstall osxfuse
sudo port -s patch osxfuse
cd $(port dir osxfuse)/work

修正すべきファイルは異なってくる。該当するソースファイルを探してみる。

grep -r "OSXFUSE Volume" .

2つマッチするがどうやら ./osxfuse-osxfuse-7b0d8d3/kext/mount/mount_osxfusefs.c というのが正解のようだ。

sudo -e ./osxfuse-osxfuse-7b0d8d3/kext/mount/mount_osxfusefs.c

OSXFUSE Volumeがマッチする箇所のあたりはこのようになっている。

    if (!volname) {
        if (daemon_name) {
            snprintf(args.volname, MAXPATHLEN, "OSXFUSE Volume %d (%s)",
                     dindex, daemon_name);
        } else {
            snprintf(args.volname, MAXPATHLEN, "OSXFUSE Volume %d", dindex);
        }
    } else {

これをmntpathを使って

    if (!volname) {
        if(mntpath) {
            const char* const mntname = strrchr(mntpath, '/');
            snprintf(args.volname, MAXPATHLEN, "%s", mntname+1);
        } else if (daemon_name) {
            snprintf(args.volname, MAXPATHLEN, "OSXFUSE Volume %d (%s)",
                     dindex, daemon_name);
        } else {
            snprintf(args.volname, MAXPATHLEN, "OSXFUSE Volume %d", dindex);
        }
    } else {

と書き換えた。適当に好みで。

あとはビルド。

cd
sudo port -s install osxfuse

MacPortsのgnuplot+wxwidgetsが遅い

最近のLinuxに入ってるgnuplotwxWidgetsを使って表示できる。


Macでもそれが可能で、MacPorts

sudo port install gnuplot +wxwidgets

とかして、wxWidgetsを有効にしてインストールしたら、

set terminal wxt

とすれば、wxWidgetsで表示してくれる。

しかし、最近表示がもっさりするようになった。単純にplot xするだけで10秒くらい待たされる。一度表示されるとすんなり行くけれど、再起動したらまたそうなる。

いろいろ試したところ、pangoとcairoというのが関係あるらしく+no_x11+quartz+universalでインストールすると改善した。

sudo port install cairo +no_x11+quartz+universal
sudo port install pango +no_x11+quartz+universal

でもこうしちゃうと今度はMacPortsでインストールしたgtkを使うプログラムがちゃんと動かなくなる。。。困った。

MacPortsで複数のvariantを並行してactivateできたらいいのに。



2012/5/8 追記

いつのまにかgnuplotにqtとwxwidgets_develというvariantsが指定できるようになっていた。
qtを有効にすればqtを使ったプロット画面が使える。ちょっとデザインがこなれてないのはご愛嬌。
wxwidgets_develを使ってみたら、pangocairoがX11用のものでも遅延なく動作するようになっためでたし。

OS X LionからSambaにアクセスできない

LionになってSambaがAppleのオリジナルコードで置き換えられたらしく、Sambaで共有されてるNASをマウントできない。
この記事に従ってハックするとマウント出来るらしいのだが、自分の場合出来なかったので代替策。

MacPortsでsamba3をインストールする。samba4はなぜかうまく接続できないので使わない。

sudo port install samba3 +universal

このとき、samba4がインストールされているとビルドに失敗するらしい(これに気づくのに時間がかかった)ので、その場合にはdeactivateするなりしておく。

sudo port deactivate samba4

samba3をインストールすると、smbclientが使えるようになる。smbclientを使うとftpコマンドのようにsambaサーバーにアクセスできる。


これでも使えることは使えるのだが、コマンドベースだとなかなか使いにくい。やっぱりマウント出来たほうがありがたい。調べてみると幾つかマウントするためのツールがあるみたいだけど、うまくビルドできなかったり。
そこでlibsmbclientのAPIを使ってsambaをマウントするFuseを勉強がてら書いてみた。

libsmbclientはマルチスレッドには対応していないらしいので、mutex lockをかけている。
読み込むアドレスとかユーザー名パスワードとかがハードコーディングされてるのがちょっと問題。どうやってFuseのオプションと協調すべきなのかよくわからなかったので放置。

iPhoneをUSB経由でマウントする

最近のUbuntuは優秀でiPhoneをマウントして中身を操作できる。写真を取り出すだけじゃなくて、アプリケーション内の書類にもアクセスできる。GoodReader内の書類にアクセスできるのがかなり便利。
Macの場合、iTunesを介すればアプリケーション内の書類にファイルを書きこむことはできるか取り出すことはできない。
こういったソフト

を使えばできないことはないが、有料だったり使いにくかったり…なので無料でできないか調べてみる。
(ちなみに以下の方法でiPhone4S iOS5.01 non-JBをマウントできました)


追記:GoodReaderに限る場合、別の方法あり。一番下に追加。

前調べ(読み飛ばして大丈夫)

どうやらUbuntuではimobiledeviceというライブラリが使われているらしいので調べてみる。

とりあえず、Sources and Dependenciesのところからlibimobiledevice-1.0.6.tar.bz2を落としてきて、なんとかビルドする。これだけじゃマウントはしてないので、ifuse-1.1.1.tar.bz2も落としてきていろいろオプションを試してなんとかビルドする。そしてifuseでマウントしてみる。そうすると、iOS4.1のiPhone3GはマウントできるのだがiOS5.01のiPhone4Sはマウントできない。libimobiledevice-1.1.0.tar.bz2も試してみるができない…なのでUbuntuで使われているimobiledeviceを使うことにする。

インストール

MacPortsの代わりにyumなどを使えば、とくにMacに限るわけではないと思う)

まずusbmuxdが必要だと言われる。MacPortsにあったのでMacPortsのをインストールした。

sudo port install usbmuxd +universal

その他fuseとか必要だと思うので、configureで怒られたら、そのたびにMacPortsにパッケージが無いか探して見ること。

つぎにlibimobiledevice。Ubuntu上(僕は11.04)で

apt-get source libimobiledevice

を実行する。(多分10.04はだめ。なるべく新しいもので)
そうするとlibimobiledevice-1.1.0というフォルダができているので、tarにしてscpでMacに転送するなどする。
Macで展開したら

./configure --without-swig --prefix=${HOME}/opt

python bindingがあるとビルドがうまく通らないのでwithout-swigをつけている。prefixは各自の好みで。僕は${HOME}/optに自分でビルドしたものを置いている。なにかエラーが出る場合にはいろいろ試して見ること。
そしたら

make && make install

これでlibimobiledeviceのインストールは完了。

次はifuse。Ubuntuのものからでも、オリジナルのソースでも大丈夫だった。展開したらconfigure

PKG_CONFIG_PATH=${HOME}/opt/lib/pkgconfig ./configure --prefix=${HOME}/opt

前に付いている環境変数は、${HOME}/optにlibimobiledevicをインストールしたから必要なもよう。上手く行かなければいろいろ試して見ること。そしたら、

make && make install

これでifuseのインストールも完了。

マウント

マウントするときは

ifuse <mount_point> [OPTIONS]

でできる。

iOS5.01でもマウントできる。しかしアプリケーションの書類は見れない。残念。写真は取り出せる。他にもなぞのディレクトリがちらほら。

アプリケーションの書類もなんとかしてアクセスできないものか。
改めてlibimobiledevice - A cross-platform software library and tools to communicate with iOS devices nativelyのページを見てみると、

Use iFuse with the "--appid APPID" argument to mount a document folder of an application and simply manage your files as needed.

http://www.libimobiledevice.org/

とあるではないか!

GoodReaderをマウントしたいので

ifuse --appid com.goodiware.GoodReader <mount_point>

と試してみるとマウントできる。すばらしい。
ファイルを書きこもうとすると何か怒られるけれどちゃんと書きこまれているみたいだ。


なんで時間無いのにこんなことに時間を費やしてしまったのだ…

GoodReaderに限る場合

GoodReaderに限るのならもっと簡単(いやどうだろう…)にマウントができることが分かった。

このページ

は脱獄済みのiPhoneにUSB経由でSSHする方法なのだが、試しにGoodReaderのWebDavで試したらどうかと思い試してみたら上手くいった。別に脱獄している必要はない。

usbmuxd自体はインストールされているべきかどうか分からないが、このページで言っていることをGoodReade向けに書き換えると

これで以上。実際にはiPhoneWIFIがOFFになっていても、GoodReaderの共有さえ立ち上がっていればできる。

tcprelay.pyは同じファイルにあるusbmux モジュールを利用している。環境変数PYTHONPATHを設定すればusbmux.py usbmux.pycをそこに置いておける。

MacBook Proのゴム足が取れてしまったので付けてみた

去年の夏ごろにこのMacBook Proを購入して愛用している。

Apple MacBook Pro 2.4GHz Core 2 Duo/13.3

Apple MacBook Pro 2.4GHz Core 2 Duo/13.3"/4G/250G/8xSuperDrive DL/Gigabit/802.11n/BT/Mini DisplayPort MC374J/A

よく使っているせいか、底面のゴム足が取れてしまった。

当然だけれど、ゴム足が無いと滑って不便。なので、下に消しゴムをおいてしのいでいた。
調べてみるとAppleで下部ケース交換してくれるらしいのだがお高そうなので遠慮しておくことに。

ずっとこのままだったのだが、思い立ってゴム足ぐらい売っていないかなと思って調べたら普通にあるではないか。

3M スコッチ クッションゴム 12.7×3.6mm 14粒 CC-05

3M スコッチ クッションゴム 12.7×3.6mm 14粒 CC-05

サイズが違うのが他にもあるのだが、なるべくゴム足があったところの溝の半径に近くて高さが低い物としてこれを選択。これでも溝の方がちょっと大きいけど。

そしてくっつけてみる。
…の前に、もともとのゴム足の残りカスが残っていたので、一旦カバーを開けて除くことに。分解したときの写真は撮ってないのだが、ネジ穴が細かいので神経使った。ネジ穴が崩れないように慎重に。
埃もたまってて、ゴム足の残りカスもとれたので、ついにゴム足を付ける。
念の為アルコールティッシュでゴム足のあった溝を拭いておく。そしてくっつける。

こんな感じ。

普通に置くとちょっと浮いている。

良いとも悪いとも言えないけれど、まぁ排熱の為には浮いていたほうがいいのかな。


これで毎回消しゴムを置かないで使える!

Ubuntu Natty Narwhalで一部のメニューの表示がおかしい

Ubuntu Natty Narwhal (11.04)のGnomeテーマはAmbianceを使っているのだが、コンテキストメニューが変になっているものがある。
多分英語版だとなんともないように見えるのだろうが、日本語化してフォントサイズも変更したせいなのか、こんなふうになってしまう。


背景一色で構わないので直してみる。

いろいろファイルを探ってみた結果、/usr/share/themes/Ambiance/gtk-2.0/apps/gnome-panel.rcがどうも怪しい。

結果から話すと一番簡単にはファイル末尾の方にある

widget "*PanelApplet*"            style "panel"

widget "*PanelApplet*"            style "dark"

に書き換えれば、まぁとりあえずは大丈夫と思う。

もっと凝りたければ

style "panel_applet" = "dark"
{
 	xthickness = 0
        ythickness = 0

	# bg_pixmap[NORMAL] = "img/panel.png"

        bg[NORMAL] = "#4b4a46"

        engine "murrine" {
                #contrast = 1.0
                textstyle = 2
 	        text_shade = 0.35
        }
}

widget "*PanelApplet*"            style "panel_applet"

にするとか。


直接にstyle "panel"をいじってしまうと、他のところも背景一色になってしまっていただけないので、別のスタイルを作った。

HTML5でXY Model

HTML5Canvasを勉強してみようと思い立ってつくってみた。Ising ModelもMandelbrot Setも既にあったのでXYModelをば。


XY Model - jsdo.it -

CanvasSVGとは違い、ビットマップでありピクセル操作できる。昔はJavaScriptでビットマップを描くなんて難しかったのになあ、とても便利だ。
試した限りではどのブラウザでも動作した。それなりのスピードで動いたのが驚きだった。さすがにiPhone 3Gの場合はかなりもっさりだったけど。