最新 追記

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2011-05-02

BH-905 USB充電ケーブル

Nokia のノイズキャンセリング Bluetooth ヘッドホン BH-905 を愛用しているのですが、充電用の AC アダプタがイギリス仕様なので何かと不便です。

ヘッドホン側の入力は 5V なので、適合する DC プラグさえあれば USB から電源をとって充電できますが、DC プラグが 2.0mm と特殊なため秋月電子でも取り扱っていないようです。

…と思っていたんですが、ある日「2.0mm DCプラグ」でぐぐってみたら探していたものがズバリみつかりました。極性も問題なく、正常に充電できています。これで eneloop などでも充電できるようになりました。

バルク品とのことで 次回入荷があるかどうか怪しいので、BH-905をお持ちの方は早めの購入をおすすめします。


2011-05-04

MacBook Air 無償修理

ヒンジが本来開く最大の角度よりも開いてしまうようになってしまった MacBook Air の無償修理が決定しました。

Apple Store に持ち込んで症状を説明すると、完全に破損していない単なる開きすぎは無償修理の対象外、このまま症状が進行して完全に壊れれば無償修理になると言われました。保証期間の切れている状態での有償修理だと本来6万円ほどするようで。

そこでMacBook Air のヒンジのトラブルシューティング

  • 蓋が完全に閉まらない。
  • 1 個または両方のヒンジのそばのプラスチックが破損、またはひび割れしている。
  • 蓋を開閉するとき 2.5 cm (1 インチ) 以上のあそびがある。
  • 蓋が 30 度開いた位置から落ちて閉じる (閉位置から蓋を約 30 度開き、放す)。

を見せて「じゃあちょっと他の人にきいてみてくださいよ」というと…。

店員A「ねーこれどう解釈したらいいと思う?(上の条件を見ながら)」
店員B「ああ、開きすぎも対象だよ」
店員A「ああ、そうなの?」

…というわけで無償修理になりました。修理は上半分(液晶ディスプレイ部分)の交換になるようです。

とりあえずその場は持ち帰ってきて、部品が届き次第預けることにしました。


2011-05-25

net/xrdp でログイン名が正しくセットされない問題の修正パッチ

FreeBSDで net/xrdp (xrdp-0.6.0.20110117cvs)を使用していると、ログイン名が正しくセットされず、以下の例のようにMySQLなどのアプリケーションで問題になる場合があります。

[meta@rose ~]$ mysql
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

この例では、ユーザ 'meta' でログインしているのに mysql が 'root' でログインしようとしてしまい、期待した動作をさせるためには mysql -u `whoami` などのオプションを付ける必要があります。この原因は `id -p` などを実行してみるとわかります。

[meta@rose ~]$ id -p
login  root
uid    meta
groups meta

id コマンドの出力を見ると login が root になっています。ユーザ名の取得に getlogin() システムコールを使用しているため、setsid()/setlogin() によって正しくログインセッションが定義されていないと FreeBSD-SA-02:07.k5su や mysql などのアプリケーションで問題になります。これは xrdp がもともと setlogin() システムコールの存在しない Linux で開発されていたために、FreeBSD 上で xrdp を実行する際に顕在化する問題です。

FreeBSD-SA-02:07.k5su で言及されているように、getlogin() はプロセスを実行するユーザ名と異なるログイン名を返してしまう場合があるため、値のチェックなしで使用するべきではないのですが、ログインセッションを生成しない xrdp-sesman にも問題があります。

この問題を解決するため、xrdp-sesman がウィンドウマネージャを起動する際に新たなログインセッションを生成するように修正するパッチを作成しました。このパッチは OpenSSH のコードを利用しているため、OpenSSH のライセンスに従ってライセンスされています。

パッチは既にPR済なので、近いうちに Ports tree へコミットされるでしょう。

2011年10月27日 追記

このパッチにはバグがあったため、修正版のパッチを submit しました。 詳しくは 10月27日の記事を参照してください。


2011-05-27 lv の唯一にして最大の less に劣る点を修正する俺得パッチ

lv が唯一 less に劣る点を修正する俺得パッチ

lv が唯一 less に劣る点は "lv /" とかやるとディレクトリを無理矢理表示してしまう点です。

$ lv /
^B^@^@^@^L^@^D^A.^@^@^@^B^@^@^@^L^@^D^B..^@^@^C^@^@^@^P^@^D^E.snap^@^@^@^@<^C^@
^L^@^D^Cdev^@^@^\^F^@^L^@^D^Cext^@^E^@^L^@^D^Ctmp^@^@<98>^C^@^L^@^D^Cusr^@^@\^@
^@^L^@^D^Cvar^@^@À^E^@^P^@^D^Dhome^@ÿÿÿ^@¸^@^@^L^@^D^Cetc^@^@x^F^@^P^@^D^Ddist^@
ÿÿÿ^@p^A^@^L^@^D^Cbin^@^@ô^C^@^P^@^D^Dboot^@ÿÿÿ^@Ô^F^@^L^@^D^Clib^@^@Ì^A^@^P^@^D
^Glibexec^@^@(^B^@^P^@^D^Emedia^@ÿÿ^@<84>^B^@^L^@^D^Cmnt^@^@d^E^@^P^@^D^Dproc^@ÿ
ÿÿ^@à^B^@^P^@^D^Frescue^@ÿ^@¬^D^@^P^@^D^Droot^@ÿÿÿ^@0^G^@^P^@^D^Dsbin^@ÿÿÿ^D^@^@^@^L^@
^Csys^@^E^@^@^@.profile^@À^_^E^F^@^@^@^P^F.cshrc^@ÿ^G^@^@^@^T   COPYRIGHT^@^_^@
^@^@^P^@
^Fcompat^@ÿ     ^@^@^@<88>^Gentropy^@^@<8C>^G^@x^@^D^Dclub^@ÿÿÿ^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

これが less だとちゃんとエラー表示をしてくれます。

$ less /
/ is a directory

致命的というわけでもないのですが気にくわないのでパッチを作成しました。

これでディレクトリを引数に与えても大丈夫!

$ mylv /
/ is a directory

grep モードにも対応しています。

$ mylv -g PATTERN /usr/local /usr /
/usr/local is a directory
/usr is a directory
/ is a directory

オリジナルの lv だとこんな事になってました。

$ lv -g profile /
s.profile.cshrcÿCOPYRIGHT

grep モードで複数のファイルを引数として与えたとき、最後のファイルが存在しないファイルだと Segmenation Fault で落ちるのはオリジナルのバグのようです。

$ lv -g PATTERN /tmp/nonexistence /nonexistence
(snip)
Segmentation fault: 11 (core dumped)

存在しないファイルが最後でなければ落ちません。

$ lv -g PATTERN /etc/profile /etc/ntp.conf /nonexistence
/tmp/nonexistence: No such file or directory
/nonexistence: No such file or directory