いるねすのブログ

働きたくない系SEが無駄に遊んだ記録

Linuxのバイナリ互換を有効にして、Flashプレーヤーを使えるようにした

ニコニコ動画が見たい。でもFlash PlayerはFreeBSD向けバイナリなんて配ってくれていない。これだからプロプラエタリなソフトウェアは・・・とかガッカリしてたが、どうもFreeBSDLinuxのバイナリ互換機能ってのがあるらしい。カーネルのビルドが必要みたいだ。

たかだかFlashのためにカーネルのビルドまでするのは屈辱的だが、まあどうせ、いずれ他のバイナリなんかも使いたくなってくるだろうし、遊びもかねてやってみる。

なにはともあれカーネルビルド。まずは設定

cd /usr/src/sys/amd64/conf
cp GENERIC LINUX_COMPAT
vi COMPAT_LINUX

コピーした /usr/src/sys/amd64/conf/LINUX_COMPAT の適当なところに追記

options         COMPAT_LINUX32          # Compatible with Linux

あとは普通にビルドして再起動

cd /usr/src/
make buildkernel KERNCONF=COMPAT_LINUX
make installkernel KERNCONF=COMPAT_LINUX
reboot

これでLinuxのバイナリ互換ができるカーネルが出来上がった。お次はflashplayerをインストールする

portinstall www/nspluginwrapper www/linux-f10-flashplugin11
nspluginwrapper -v -a -i #各ユーザ毎に1回だけ実行する

あとはブラウザを再起動するだけ。無事にニコニコ動画も見れるようになった。 にっこにっこにー!

FVWM2のFvwmTransFocusでMPlayerが透けないようにする

※すげえ雑なHackなので、他の環境では上手く動かない気がしてならない

fvwm2をつかってて、窓を透過させるのにFvwmTransFocusを使ってる。ただコイツは何でもかんでも問答無用で透過させちゃって、大変イケてない。たとえばMPlayerで動画を再生しても、その窓まで透過してしまうわけだ。正直困る。

ということで、ソースを覗いてみた。コメントで、透けさせるかどうかを制御するには ignoreWindow() を編集してね、とか親切に書いてあるのでそこを編集する。

/* Ignore apps for watching TV */
num = !strncasecmp(class.res_class, "xawtv", 5)
   || !strncasecmp(class.res_class, "tvtime", 5);

とかあるので、末尾に !strncasecmp(class.res_class, "mplayer", 5) と追加してやる。が、動かない。

なんかどうも class.res_class が正しくとれてないみたい。なんでか調べたら、その上の XQueryTree() で子ウインドウが1以上取れてるせいで return 0; しちゃってる。 どうもどのウィンドウもみんな14こくらい子窓が開いてて、 children[num-1] が本来欲しかった窓になってる模様。 なんかコメントにもそれっぽい事を書いてはあるが、よくわかんないし何でそのままにしてるのかも謎。

とにかく自分の環境では、 ignoreWindow() にきたウィンドウIDの子ウィンドウリストの末尾に XGetClassHint() してやれば上手くいくので、もう面倒だし決め打ちでロジックを書いてしまった。

それがこれ。

暇があったら他でもちゃんと動くか調べて書き直そう。

SLiM導入

startxも味気ないので、そろそろグラフィカルにログインできるようにする。

WMはfvwm2を使ってて、ログインするのも軽くてシンプルなのがいいなと思ったのでSLiMを入れることにした。

portinstall x11/slim して、/etc/rc.conf に以下を追記。

slim_enable="YES"

あとは再起動すればSLiMが起動するんだが、その前に ~/.xinitrcshebangを書き忘れてログインできなくなる罠に嵌った。

#!/bin/sh
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
exec uim-xim &
export XMODIFIERS=@im=uim
exec fvwm2

先日のUIMの設定も含めて、これが今の .xinitrc

mDNS(avahi)導入

MacOS Xなんかだとデフォルトで hostname.local とかで名前が引ける。

会社なんかはともかく、自宅LANなんかではDNSの用意なく、IPアドレス直打ちみたいな事もしないで良く、とっても便利なので、家にあるマシンは基本的にみんなmDNSを導入してる。 ということで新しく動かしはじめたFreeBSDもmDNSで名前を引けるようにした。

参考: http://d.hatena.ne.jp/faw/20060601

portinstall net/avahi dns/nss_mdns して、 /usr/local/etc/avahi/avahi-daemon.conf を編集。

host-name=kotori
domain-name=local

もちろん、この設定は /etc/hosts なんかのホスト名・ドメイン名の設定とあわせる。

で、/etc/rc.conf に以下を追記。

avahi_daemon_enable="YES"

/etc/nsswitch.conf を編集。

hosts: files mdns dns

再起動してみて、pingが通るか試す。通ったのでOK。

我が家のホスト名の命名規則は二次元美少女の名前。だいたいその時一番好きな子を使う。ということで今はラブライブ!のことりちゃんである。あの高音がたまらんのである。萌えーである。

sshで接続するのが遅すぎるのを改善

最近手を焼いてるFreeBSDマシンへのsshログインがすごく遅い。接続開始からパスワード入力までに10秒20秒平気で待たされる。 何が悪いんだとwiresharkでパケットを覗いてみたら、何のことはない、DNSの逆引きが失敗してるだけだった。

そもそもウチの貧弱なネットワーク環境にDNSなんて大層なものはなく、名前はもっぱらmDNSでどうにかしてるだけなので、逆引きなんてことはしないでよろしい。

ということで /etc/ssh/sshd_config を修正。

UseDNS no

あとはsshdを再起動しておしまい。

skk環境整備

X環境が整いつつあるので、日本語入力のためにskkを入れる。

skkinputとかscim-skkとかuim-skkとか色々選択肢はあるけど、使い慣れてるuim-skkを使うことにした。 毎度おなじみportinstallで、 portinstall textproc/uim-gtk3 japanese/skk japanese/skk-jisyo して、 ~/.xinitrc を編集。

export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
exec uim-xim &
export XMODIFIERS=@im=uim
exec fvwm2

startxすればuimが起動してXが立ち上がるので、あとは uim-im-switcher-gtk3 でデフォルトのIMをSKKにしたり、 uim-pref-gtk3 でuimとかskkの設定をいじったりすればOK。

FreeBSDの日本語man

manpageは当然英語だった。 英語manは当然あるべきだが、できれば普段は日本語manを読みたい。

うちの会社にもやっぱり参考書は原語版だよねーとかmanは英語で読むべきだよねーとか、やたらと英語にこだわってみせる英語厨がいて大変腹立たしい。そんなに英語力を自慢したいか。よほど酷い訳でもない限り母国語のほうが理解しやすいに決まってんだろと。ニッポンジンならニホンゴだろうと。ああどうせTOEICの成績悪いですよ。あんなクソ長いリスニングテストなんて寝るだろ普通。

まあ愚痴はさておき、日本語manが欲しい。ということで portinstall japanese/man japanese/man-doc としてインストールしたが、manpathがなぜか通っていなかったので、/etc/manpath.conf に以下を追記。

MANPATH_MAP    /bin               /usr/local/man
MANPATH_MAP    /usr/bin           /usr/local/man
MANPATH_MAP    /usr/local/bin     /usr/local/man

また、japanese/man-doc はeuc-jpで書かれているので、自分のutf-8環境にあわせるため ~/.zshrc などに以下を追記。

export PAGER="lv"
export LV="-Ou8"
alias jman="LC_CTYPE=ja_JP.eucJP jman"

デフォルトのページャをlvにしたので、 portinstall misc/lv もやっておく。

あとは $ jman jman とかすれば日本語manがでてくる。ざまあみろ。