あのチケットが届きました。
5月3日だけです。すみません。 ???
2007年4月12日木曜日
2007年4月11日水曜日
2007年4月10日火曜日
(FreeBSD) Xのフォントサーバ(xfs)を使ってみました (ただの気まぐれ)
この前、VNC serverでXのフォントサーバを使うと云々・・・
ってのがあったので、今度は、ごく普通に、Xサーバ(Xorg)でXのフォントサーバを使ってみました。
昔聞いた、xfsを使うとメモリ使用量が減るという噂が本当なのか確認したかったのですが、やってみたところ、ほとんど変わりませんでした。あははははは
Xサーバ起動後、firefoxなどいくつかのアプリを起動した時点で、topコマンドで見た、大雑把な値。
xfsなしで300MB程度、xfsありで294MB。
もっとも、residentはずっと小さくて、それぞれ41MB、34MBでした。
その程度の差は、どうでもいいかな。
ただ、ものすごぉ~く気のせいのような気がしているのですが、xfsを使ったほうが、なんとなく、本当になんとなく、firefoxがサクサク軽く動くような気がしました。
それまで数日間立ち上げっぱなしだった環境を、一度、Xサーバを終了し、立ち上げなおしたせいで、なんかがすっきりさっぱりしただけなのかも。
☆ ☆ ☆
■ FreeBSDでxfsを使うようにする設定手順
せっかくFreeBSDでxfsを使う方法を調べたので、メモとして残しておきます。
xfsの起動スクリプトは、
/usr/X11R6/etc/rc.d/xfs.sh
になります。/etc/rc.confに
xfs_enable="YES"
を書き足します。
xfsの設定ファイルは、/usr/X11R6/lib/X11/fs/configにあります。とりあえず、こんな感じにしてみました。
% cat /usr/X11R6/lib/X11/fs/config
# font server configuration file
# $Xorg: config.cpp,v 1.3 2000/08/17 19:54:19 cpqbld Exp $
clone-self = on
use-syslog = off
catalogue = /usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/TTF/,/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/CID/,/usr/X11R6/lib/X11/fonts/75dpi/,/usr/X11R6/lib/X11/fonts/100dpi/,/usr/X11R6/lib/X11/fonts/bitstream-vera/,/usr/X11R6/lib/X11/fonts/cyrillic/,/usr/X11R6/lib/X11/fonts/local/
error-file = /var/log/xfs.log
# in decipoints
default-point-size = 120
default-resolutions = 75,75,100,100
configファイルを設定したあと、
# /usr/X11R6/etc/rc.d/xfs.sh start
で、すぐに、xfsを起動できます。
もっともそれだけではxfsは使われないので、xfsを利用するようにフォントパスを指定する必要があります。xset fpコマンドで指定してもいいわけですが、xorg.confで設定してもいいです。
xorg.confで書く場合は
FontPath "unix/localhost:7100"
という感じになります。そのほかのFontPathは不要なので
# FontPath "/usr/X11R6/lib/X11/fonts/misc/"
# FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
# FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
というように、#をつけてコメントアウトしてしまいます。
ただし、本当に全部コメントアウトしてしまったら、firefoxなど、TrueTypeフォントを使っていたXアプリが、
Gdk-WARNING **: Missing charsets in FontSet creation
Gdk-WARNING **: ISO8859-1
Gdk-WARNING **: JISX0208.1983-0
Gdk-WARNING **: JISX0201.1976-0
** WARNING **: Failed to open font: "-kochi-gothic-medium-r-normal-*-*-110-*-*-c-*-jisx0208.1983-0".
というようなエラーを出すようになってしまいました。なるほど、xfsって、TrueTypeフォントには対応していないのでしょうか?
そこで、とりあえず、xorg.confでこれだけは残しておきました。
FontPath "/usr/X11R6/lib/X11/fonts/TrueType/"
昔(XFree86 3.3.6くらいだったか)、X-ttとかいって、TrueType用のパッチをあてて使っていたことがありましたが、同様にxfs-ttとかいうのもありました。
Xorgの場合、なんかをconfigファイルにかけばいいだけなのかも・・・?ま、いーや。xfsを使い続けるつもりないし・・・
☆ ☆ ☆
■ xfsでTCPソケットを使わないようにする
上記のようにした場合、sockstatコマンドで調べると、こんな具合になります。
% sockstat | grep xfs
root xfs 41287 3 tcp6 *:7100 *:*
root xfs 41287 4 tcp4 *:7100 *:*
root xfs 41287 5 stream /tmp/.font-unix/fs7100
root xfs 41287 6 stream /tmp/.font-unix/fs7100
最近は、余計なネットワークポートは開くな、というのがセオリーらしいので、xfsがTCPで7100を開いているのはいやだ!と思う人もいるかもしれません。
ちゃんと、そういう使い方もできるようになっています。
とりあえずXサーバを終了。
/usr/X11R6/lib/X11/fs/configに
no-listen = tcp
を書き加えてから、xfsを再起動します。
# /usr/X11R6/etc/rc.d/xfs.sh restart
この時点でsockstatで調べてみると、
% sockstat | grep xfs
root xfs 41942 3 stream /tmp/.font-unix/fs7100
root xfs 41942 4 stream /tmp/.font-unix/fs7100
となって、UNIX domain socketしか開いていません。
そして、xorg.confでのフォントパスの指定を、
FontPath "unix/localhost:7100"
から
FontPath "unix/:7100"
に変更します。
余談。いやぁ~、xfsのマニュアルを見ても、unix/:7100という書き方はぜんぜんわかりませんでしたよ。
/のあとに何を書くのか?
:のあとに何をかくのか?って。だって、ソケットのパス名は「/tmp/.font-unix/fs7100」になってますからねぇ。個人的には謎の書式だと思うのですが。
こうやっておいてから、startxでXを起動。xset qで見ると、たとえばこんな感じ(これはTrueTypeフォントのパスを抜いてあります)。
# xset q
Keyboard Control:
auto repeat: on key click percent: 0 LED mask: 00000000
auto repeat delay: 500 repeat rate: 30
auto repeating keys: 00ffffffdffffbbf
fadfffdfffdfe5ef
ffffffffffffffff
ffffffffffffffff
bell percent: 50 bell pitch: 400 bell duration: 100
Pointer Control:
acceleration: 2/1 threshold: 4
Screen Saver:
prefer blanking: yes allow exposures: yes
timeout: 600 cycle: 600
Colors:
default colormap: 0x20 BlackPixel: 0 WhitePixel: 16777215
Font Path:
unix/:7100
Bug Mode: compatibility mode is disabled
DPMS (Energy Star):
Standby: 1200 Suspend: 1800 Off: 2400
DPMS is Enabled
Monitor is On
File paths:
Config file: /usr/X11R6/lib/X11/xorg.conf
Modules path: /usr/X11R6/lib/modules
Log file: /var/log/Xorg.0.log
「Font Path」のところに現在のフォントパス設定が表示されています。
☆
2~3日、xfsを使ってみましたが、xfs使っても使わなくても違いがわかんないので、使わないことにしちゃうかも(笑)。だってFreeBSDでは、デフォルトは使用しない、になってるし。
2007年4月8日日曜日
大人になったらモーニング・・・らしい
オトナになったらBS-i・・・とよく似てますが、ありがちなコピーってことで。
たしかにヤンマガってもう辛いなぁと思ったころにモーニングがわりとすんなり受け入れられた。10数年前のことだけど。
表紙が見開きになっていて、表1が作品のキャラの絵、開いた側に作家さんの似顔絵が載ってます。
ちなみに、裏は金田一少年の事件簿のDVDボックスの広告でした。
大人なら買うのか、それとも、もう大人なんだから買わないのか。
なんとなく気づいてしまったのですが、P.47から掲載されている「ねこだらけ」(横山キムチ)という4コマが表紙には載っていません。というか、巻末の目次にさえものっていません。「連載」ではないからなのか?
俺ハエでさえ載っているのに。存在意義が不明のモチケンでさえ載っているのに。
欄外の3行程度のコネタでさえ目次には載っているのに。
あ、ヨロズ屋ってのは載ってないんだ。
☆
(2007/7/28)
先週の33号、今週の34号、2週続けて「ねこだらけ」(横山キムチ)がのってる!
しかも、今度は、ちゃんと目次に載ってる!!
出世してる。
バガボンドの後、23ページ目から掲載、ってすごい位置?
欄外のあおりで、「2週連続登場 その2」って書いてある。
でも、先週のを見直してみると、2週連続登場なんて、書いてない。
・・・あれ?
大人なモーニングだけに、大人の事情がありそうだ。
☆
最近週刊連載になった「僕の小規模な生活」。
はじめて読んだときから、すごい好きです。
読むと安心するから、っていう感想が多いみたいですね。
スーパーくいしん坊
初めて読んだとき、つまんないなぁ~と思ったはずなのに、忘れたころに、なぜかまた読んでしまう・・・
スーパーくいしん坊
ビッグ錠/牛次郎
はじめて接したのが「一本包丁満太郎」。あまりにもバカバカしくて、くだらねーと思わせるボーダーラインをはるかに超えていたため、大ウケしました。というか若い女の子が一本包丁満太郎読んでたのを見せてもらい、それで知ったんでしたが、あんた何者?とそっちが謎に思いました。
その後、「包丁人味平」に出会い、なるほどこれがすべての原点、ここから歴史がはじまったのかと、妙に関心してしまう。後に、いろいろなところで引用されることになる元ネタが、満載。白糸バラシとか。そんなに引用されてないか・・・でも、現代人としては教養として知っておくべき基礎知識ですよね。うん。
それからだいぶたって、この「スーパーくいしん坊」に出会う。本屋でたまたま見つけて、こんなのあったのかぁと、即、買ってみたものの・・・うーん、上記の2作品よりは、大げささ、派手さが、あまりない(普通の作品と比べたら、それでもまだやりすぎで派手とは思うけど)。
それでも、じわじわと効いてくるんですねぇ。
2007年4月7日土曜日
(X Window System) 昔、xhostって使っちゃいけないコマンドだと教わったのですが・・・xauthをよろしく
私がX Window Systemを使い始めてすぐに教わったことなので、もう10年以上前から、言われてきたことです。
xhostコマンドはセキュリティホールになるから、絶対に使ってはいけない。
ところが、21世紀にもなって、いまだに、「xhost +ホストと実行してください」なんて、どうどうと書いてあるのを見かけることがあります。つい最近も、とある商用ソフトのインストール方法の説明書、使用方法の説明書で見かけました。
危険性を知らないでxhostを使えと書いているのかも知れませんし、ひょっとすると、(xhostの代わりとして使用すべき)xauthコマンドの使い方を説明するのがメンドクサイので、確信犯でxhostを使わせているのかも知れません。
☆
Microsoft Windowsとかと違って(いやWindowsの仕組みはよく知らないのですが)、X Window Systemでは、クライアントサーバー方式でGUIが実現されていて、
- 画面を描画するソフトウェア(Xサーバ。画面に絵を描く以外に、キーボードやマウスなどの入力デバイスの面倒も見る)
- こんなの描画してね、と指示をするソフトウェア(Xクライアント。ようするにXのアプリケーション。xtermとかfirefoxとか全部そう)
の2つは、かならずしも同じマシン上で実行する必要はありません。特別なソフトウェアを利用することなく、ネットワークでつながってさえいれば、別々のマシンで実行できます。たとえば、
- aliceというマシンを使っていて、alice上でXサーバが動いている
- bobというマシンにログインして、bob上でXクライアントを実行し、その画面をalice上に表示させ、alice上でbobのソフトウェアを操作する
ということができます。
さすがに、あっちこっちのホストから、勝手にaliceの上であれやこれやと、Xアプリケーションのウインドウを開かれちゃったら大変なので、alice側での設定で、「かってにaliceのXサーバを使わないでよねっ!」って制限することができます。
なお、最近では、そもそもデフォルトでは、別のホスト(bob)で実行したXクライアントが、aliceのXサーバを利用できないように設定されていることが多いようです(Xサーバが、TCP socketをlistenしていない)。たぶんセキュリティ対策のためだと思うのですが・・・昔からワークステーションなどでXを使ってきたユーザーは、たまに戸惑うことがあるようです。
さて、勝手にaliceのXサーバを利用させないようにする、その制限手段としては、2通りの方法があります。それがxhostと、もう1つがxauthです。
xhostは、ホスト単位で、アクセス許可を出すコマンドです。alice上で、「xhost +bob」と実行すると、bob上で実行したXクライアントがaliceのXサーバに接続できるようになります。これで何が問題かというと、bobにログインできる人なら、だれでもaliceのXサーバに接続できるようになってしまうのです。
一方のxauthは、秘密の合言葉を知っているXクライアントだけが、Xサーバに接続できる、というものです。秘密の合言葉は、aliceのXサーバがあらかじめ決めておきます。bobで実行したXクライアントが、aliceに接続するとき、秘密の合言葉が一致していれば、aliceがbobのXクライアントを受け入れます。合言葉が一致していなければ、拒絶して、Xクライアントはウインドウを開くことも何もできず、エラー終了してしまいます。
秘密の合言葉は、ユーザーの$HOME/.Xauthority(設定によって異なる)というファイルに保存されるようになっています。bobでXクライアントを実行すると、そのXクライアントは、.Xauthorityファイルを見て、alice用の秘密の合言葉を読み取ります。DISPLAY環境変数や-display引数で、どのXサーバを利用するか(どこに画面表示するか)を指定できますので、.Xauthorityには、Xサーバごとに、秘密の合言葉を保存するようになっています。「xauth list」というコマンドで、一覧が表示されます。
xauthがxhostと違うのは、たとえbobにログイン中のユーザーであっても、秘密の合言葉を知らなかったら、aliceにウインドウを開くことができない点です。
aliceのXサーバを使っているユーザーは、aliceの秘密の合言葉を知ることができます。そのユーザーが、bob上での$HOME/.Xauthorityに秘密の合言葉を登録すれば、aliceにウインドウを開くことができます。秘密の合言葉が厳重に管理されていれば、aliceを利用できるユーザーを完璧にコントロールできるわけです。
なお、aliceとbobとで、ホームディレクトリがNFS共有されていれば、$HOME/.Xauthorityは同一のファイルですから、aliceの合言葉をbobで登録する手間は不要になります。
ところで、xhost +bobとしたときの危険性というのは何があるでしょうか。勝手にaliceにウインドウを開かれるくらい、別にいいじゃないか、と思われるかもしれません。たとえば、bobにログイン中のユーザーが、aliceを使っているユーザーにいたずらをするつもりで、aliceの画面に恥ずかしい画像を表示させたり、とかできます。まー、そんなのはまだかわいいものです。
よく危険な例として取り上げられるのが、aliceの画面イメージを、bob上で盗み取ることができる、というものです。Windows上で、ウイルスに感染して、デスクトップ画面のイメージが勝手にキャプチャされて、ネットワーク上でばらまかれる、というのがありましたが、あれと同じことができてしまうのです。ウイルスに感染することなく、xhost +bobというコマンドを実行するだけで、です。画面にメールの文章が表示されてたら、そのメールの文章が読まれてしまいますね。
もしもaliceにてxhost +bobとされているとします。
manuke@alice % xhost +bob
bob being added to access control list
ちなみにbobから使わせないようにするには、「xhost -bob」とやります。
bob上にログイン中のユーザーnhhが、次のようなコマンドを実行すると、aliceのXサーバの画面を、/tmp/hoge.pnmというファイルに保存することができます。
nhh@bob % xwd -display alice:0 -root -silent | xwdtopnm >/tmp/hoge.pnm
-rootは、rootウインドウの意味、つまり画面全体のこと(rootユーザーという意味じゃない)。-silentは、画面をキャプチャするときに音を鳴らさない、という意味らしいです(気づかれないようにこっそりとやるために)。
画面キャプチャを勝手に撮る以外にも、たぶん、aliceで、キーボードのどのキーが押されているか、なんてことも可能になっちゃうんじゃないかと思います。それってパスワードを盗み取るキーロガーと同じですよね。
xhostコマンドを使わずにxauthを使っていれば、nhhはaliceの秘密の合言葉がわからないので、画面キャプチャを撮ることはできません。
ただxauthって、xhostと比べて使い方が面倒なんです。ホームディレクトリがNFS共有されているときは何もしなくていいのですが、ホームディレクトリが別々のとき、合言葉をコピーする操作が必要です。次のようなことをやります。
alice上でxauthコマンドを実行します。xauth>というプロンプトがでるので、そこでlistというコマンドを実行すると、.Xauthorityに保存されている秘密の合言葉が一覧表示されます(xauth listでもかまいません)。
kashikoi@alice % xauth
Using authority file /home/kashikoi/.Xauthority
xauth> list
alice/unix:0 MIT-MAGIC-COOKIE-1 00112233445566778899aabbccddeeff
alice:0 MIT-MAGIC-COOKIE-1 00112233445566778899aabbccddeeff
(ほかにもいろいろ出るかもしれません)
こうやって、合言葉「001122~」を調べておきます。
(備考) aliceの秘密の合言葉は、ユーザー(kashikoi)が、aliceでXサーバを起動したりxdmなどでログインしたときに、自動的に生成・保存されます(ちなみに設定をしそこねてたり、名前引きなどのネットワークトラブルが発生すると、aliceで実行したXクライアントがaliceのXサーバを利用できなくなる、という珍現象がおきますよ)。
ユーザーkashikoiがbobにログインして、bob上でxauthコマンドを実行します。そして、addというコマンドを使って、さきほど調べたaliceの秘密の合言葉を書き込みます。最後にexitコマンドを入力。
kashikoi@bob % xauth
Using authority file /home/kashikoi/.Xauthority
xauth> add alice:0 MIT-MAGIC-COOKIE-1 00112233445566778899aabbccddeeff
xauth> exit
Writing authority file /home/kashikoi/.Xauthority
xauthをexitではなくquitコマンドで終了すると、.Xauthorityが更新されません。
xauth> quit
Aborting changes to authority file /home/kashikoi/.Xauthority
以上のようにxauthコマンドで準備をしておけば、bobでXクライアントを実行して、alice上に画面表示させることができます。こんな感じですね。
kashikoi@bob % xterm -display alice:0 &
aliceのXサーバを立ち上げなおさないかぎり、普通は秘密の合言葉は変わりませんので、何度bobにログインしなおしても、xauthは不要です。
aliceのXを立ち上げなおして、秘密の合言葉が変わってしまったら、もう一度xauthで登録しなおします。
☆
以上のような操作が面倒なので、私は、次のようなシェルスクリプト(xcookie)を使っています。
% cat xcookie
#! /bin/shR=$1
if [ x$R = x ]
then
echo usage $0 HOSTNAME
exit 1
fiCOOKIE=`xauth list | sed -n -e '/\/unix:0/s:.*unix\:0 *::p'`
IP=`hostname`ssh $R "xauth add ${IP}:0 ${COOKIE}"
alice上で、「xcookie bob」と実行します。これでaliceの合言葉がbob側で登録されます。
kashikoi@alice % xcookie bob
シェルスクリプトxcookieでやっていること。
まずalice上でxauth listコマンドを実行して秘密の合言葉を抜きだしたあと、sshでbobに接続して、「xauth add alice:0 抜き出した合言葉」コマンドが実行され、合言葉が登録される、というものです。
3分くらいで作った手抜きのシェルスクリプトなので、aliceからbobにsshできるようになっていなければならない、aliceでのhostnameを使ってbobからaliceに接続できる(名前引きができるようになっていること)、aliceのディスプレイ番号が0であること(違うなら変更すればいい)、などなど、いろいろと条件がそろっていないと、うまく動きません。注意してください。
昔、Windowsマシンで、CygwinのXサーバを実行しておき、Linuxマシンにログインして、そこでXクライアントを実行し、画面はWindowsのほうに表示する、ということをするために作ったものです。そのときは、実は名前引きができなくて、ipconfigコマンドから抜き出すとか、sshログイン先でコネクション元を調べるとか($REMOTEHOSTでわかるかもしれない)、なんか苦心してやってました。
(2007/7/3 追記)
すっかり忘れてたのですが、上に書いた手抜きシェルスクリプトなぞを使わずに、スマートにやる方法があったのでした。どうやるかっていうと・・・「man xauth」でそのものずばりが見られるのですが、xauthのマニュアルの、EXAMPLEのところに、こんな実行方法がのってます。これで、一発でできます。
% xauth extract - $DISPLAY | rsh otherhost xauth merge -
otherhostが、リモートホストの名前で、先の例だとbobです。ただし、もう何年も前からセキュリティ的にナニな感じのするrshコマンドは使えなくなっているホストが多いですから、rshの代わりに、sshコマンドを使うことになるでしょう。
kashikoi@alice % xauth extract - $DISPLAY | ssh bob xauth merge -
みたいに。