kernel 2.6.24

随分長いこと間があいてしまった。この間いろいろなことがあったのだが、今日はとにかくどこかにメモしておくべきことをメモしておく。 カーネルをバージョンアップ。Debian なのでそれ自体はいたって簡単。いつのまにか -k7 パッケージはなくなっていて、-686 に統合されたらしい。 メモしておくべきなのは、独自にいれているモジュールなど。nvidia は module-assistant のおかげでいまや特筆すべきことはない。shfs は前もひどく苦労したのだが今回もうまくいかず、と思ったらパッケージそのものが Debian から消えつつある。というわけで sshfs に乗り換えることにした。こちらはあっさり入れることができた。 そして VMWare (VMware-server-1.0.4-56528)でも一苦労。検索して Running VMWare Workstation on Ubuntu Hardy Herronという情報にたどり着き、ようやく動いた。カーネル 2.6.22 では any-any パッチすら不要だったので、じきにすんなりはいるようになるとは思うが。

gdm でのシャットダウンの禁止

特に設定しないと gdm のグリーティング画面で、「アクション」から誰でもシャットダウンや再起動ができてしまう。これではコンソールの前を通りかかった人は誰でも実行できてしまうので困ったものだと思うのだが、GNOME の考え方なのだろう、以前からこれがデフォルトだ。

また、いったんログインすれば、メインメニュー「シャットダウン」の項目があり、一般ユーザーがシャットダウンできてしまう。意図的でなくてもメニューで「ログアウト」と隣合っているので、うっかり間違えてシャットダウンしてしまうことがある。別のユーザーがリモートからそのマシンを使っていると困ったことになる。

シャットダウンを禁止するには、GNOME 2.18 では、gdm の設定ファイル /etc/gdm/gdm.conf[1] の [deamon] セクションに

[daemon]
HaltCommand=
RebootCommand=
と書き加えればよかった。シャットダウンと再起動用のコマンドに空を指定することで、自動的にグリーティング画面の「アクション」メニューから「シャットダウン」「再起動」の項目が消え、ログインした一般ユーザーのメインメニューからも「シャットダウン」が消えていた。

ところが、gdm 2.20 になると、グリーティング画面の「アクション」からは消えるが一般ユーザーのメインメニューには「シャットダウン」が出るようになってしまった[2]

gdm の設定の [daemon] セクションを見ると、 AllowLogoutActions という項目が 2.20 から増えていた。これに空の値を指定する、つまり先ほどの2行に加えて

AllowLogoutActions=
と書くことで、一般ユーザーのメインメニューから「シャットダウン」を消すことができた。

【2011年6月29日追記】 GNOME でのシャットダウンの禁止—最近の流儀 を書きました。

  1. gdm のマニュアルを見ると /etc/gdm/custom.conf という名前のようだが、Debian では古い名前 /etc/gdm/gdm.conf が使われ続けているようだ。
  2. ロックダウン・エディタ pessulus を使うことも考えたが、これで「ログアウトを無効にする」と「シャットダウン」も「ログアウト」も一緒にできなくなってしまう。これらを別々に設定することはできない。

emacs22 と wnn7-elisp パッケージ

Debian sid に emacs22 (とその GTK版emacs22-gtk) が降りてきた。さっそく入れようと思ったがいくつかのパッケージが対応していない。特に wnn7-elisp は Debian 公式のものではなく、商用(しかも5,6年も前)なので対応パッケージが出るとも思われない。自分で修正することとした。
--- wnn7-elisp.orig/DEBIAN/control	2002-05-22 18:42:05.000000000 +0900
+++ wnn7-elisp/DEBIAN/control	2007-07-09 15:02:36.000000000 +0900
@@ -1,13 +1,13 @@
 Priority: extra
 Architecture: all
-Depends: emacs20 | emacs20-dl | xemacs21-mule | xemacs21-mule-canna-wnn
+Depends: emacs22 | emacs-snapshot | emacs21 | emacs20 | emacs20-dl | xemacs21-mule | xemacs21-mule-canna-wnn
 Installed-Size: 587
 Maintainer: OMRON SOFTWARE Co.,Ltd. <wnn-info@omronsoft.co.jp>
 Description: A package of Japanese input method 'Wnn7' elisp client.
diff -u -r wnn7-elisp.orig/usr/lib/emacsen-common/packages/install/wnn7-elisp wnn7-elisp/usr/lib/emacsen-common/packages/install/wnn7-elisp
--- wnn7-elisp.orig/usr/lib/emacsen-common/packages/install/wnn7-elisp	2002-05-22 18:41:59.000000000 +0900
+++ wnn7-elisp/usr/lib/emacsen-common/packages/install/wnn7-elisp	2007-07-10 21:50:47.818091867 +0900
@@ -37,7 +37,7 @@
     emacs)
     ;;
 
-    emacs20|xemacs21)
+    emacs22|emacs-snapshot|emacs21|emacs20|xemacs21)
     install -m 755 -d ${ELCDIR}
     (cd ${ELDIR}
 
diff -u -r wnn7-elisp.orig/usr/lib/emacsen-common/packages/remove/wnn7-elisp wnn7-elisp/usr/lib/emacsen-common/packages/remove/wnn7-elisp
--- wnn7-elisp.orig/usr/lib/emacsen-common/packages/remove/wnn7-elisp	2002-05-22 18:41:59.000000000 +0900
+++ wnn7-elisp/usr/lib/emacsen-common/packages/remove/wnn7-elisp	2007-07-10 21:51:17.472192301 +0900
@@ -10,7 +10,7 @@
 case "${FLAVOR}" in
     emacs)
     ;;
-    emacs20|xemacs21)
+    emacs22|emacs-snapshot|emacs21|emacs20|xemacs21)
     echo remove/${PACKAGE}: purging byte-compiled files for ${FLAVOR}
     rm -rf /usr/share/${FLAVOR}/site-lisp/${PACKAGE}
     rm -f ${STARTDIR}/50${STARTFILE}*;
wnn7-elisp の他にも auctex, gnus も同様に修正すればいますぐ使える。これらは公式パッケージなのでしばらく待てば emacs22 対応版が出るだろう。

NICとインターフェイス名

以前、[[//pasero.net/~mako/blog/s/34#intel_pro_1000gt|「で、使わないオンボードLANとieee1394をBIOSで殺しても、新しいNICは eth0 にはな らず eth2 としてしか認識してくれない。」]]と書いたのだが、その答が[[http://lists.debian.or.jp/debian-users/200702/msg00039.html|Debian JP Users ML]] に流れてきた。これか!と思って自分のところの/etc/udev/rules.d/z25_persistent-net.rules を見てみたら、確かにここで当該NICをeth2にするという設定になっていた。

NICとkernel 2.6.18

Intel PRO/1000GT

オンボードのLANチップがどうにも調子が悪く、新たにIntel PRO/1000GTを差した。で、使わないオンボードLANとieee1394をBIOSで殺しても、新しいNICは eth0 にはならず eth2 としてしか認識してくれない。

dmesg を見ると、

...
e1000: 0000:00:0d.0: e1000_probe: (PCI:33MHz:32-bit) 00:0e:0c:xx:xx:xx
e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
...

なのに、/etc/network/interfacesには eth0やeth1と書いてもだめで、

auto eth2
iface eth2 inet static
...

としないと設定できない。どうしてだろう。

kernel 2.6.18

さて上記に伴って、まずvmplayerでネットが使えなくなってしまい、vmware-config.pl もカーネルとヘッダの情報が云々…でできないという状態だったので、思いきって sid の linux-image-2.6.18-1 に入れ換えてからやることにした。

vmplayerもすっかり入れ換えて、これは動くようになった。

別に入れているモジュールも入れ直し。nvidia-kernel-sourceは特に問題なし。shfs-sourceはコンパイルできず。バグ情報を見つけて、shfs-0.35-6-2.6.18.diffのパッチを当ててようやくできた。

e1000モジュールはカーネル同梱のもので動いているのでそのまま。というか新しいものを持ってきてコンパイルしようとしたが、まずバージョン情報を取得できず、これは2.6.18では UTS_RELEASE が include/linux/version.h と別になって include/linux/utsrelease.h になっているからのようだ。で、Makefileを書き換えてみたのだが、今度は

error: 'struct skb_shared_info' has no member named 'tso_size'

のエラーが出て失敗。e1000_main.cの’tso_size’を’gso_size’に書き換えればいいというのを見つけて、これでコンパイルできた。

fontconfig 2.4.1

永らく 2.3.2-1 で hold していたのだが、思い余って現時点の sid のバージョン 2.4.1 に入れ換えてみた。

設定ファイル

設定ファイルの配置が変更になったようで、/etc/fonts/conf.avail/ から/etc/fonts/conf.d/ にリンクが張られていると有効となるようだ。で、この中に 51-local.conf というのがあって、それで /etc/fonts/local.conf を読み込むようになっているので、ローカルの設定は結局 /etc/fonts/local.conf に書けばよさそう。 ところで debian 的には、/etc/fonts/conf.avail/ 以下の内容を書き換えたい(上書きしたい場合)はどうするのがよいのだろう。例えば 90-synthetic.conf は「疑似斜体」と「疑似ボールド」を実現するのだが、このうち斜体は生かしたくてボールドは抑制したい。local.conf で embolden を false にしても読み込みの順番によって true にされてしまう。90-synthetic.conf を直接書き直すのだろうか。 ここでは、リンクを /etc/fonts/conf.avail/51-local.conf から/etc/fonts/conf.d/91-local.conf に張りかえて、local.conf が最後になるようにした。

IPAフォントを総称名で

「sans」「sans-serif」で指定したときに、IPAフォント[1]を用いるようにしたい。Xft フォントシステムの設定を参考にして、/etc/fonts/local.conf に
<alias>
  <family>serif</family>
  <prefer>
    <family>Bitstream Vera Serif</family>
    <family>IPAMincho</family>
  </prefer>
</alias>
<alias>
  <family>sans-serif</family>
  <prefer>
    <family>Bitstream Vera Sans</family>
    <family>IPAGothic</family>
  </prefer>
</alias>
<alias>
  <family>monospace</family>
  <prefer>
    <family>Bitstream Vera Sans Mono</family>
    <family>IPAGothic</family>
  </prefer>
</alias>
のように書く。

ボールドはEPSONフォントを

EPSON プリンタに付属の CD-ROM に太明朝や太ゴシックなどのフォントが入っている[2]ので、ボールドは疑似を使わず、これらを用いるようにする。 /etc/fonts/local.conf では、まず疑似ボールドを抑制し[3]
<match target="font">
  <edit name="embolden" mode="assign">
    <bool>false</bool>
  </edit>
</match>
明朝 (IPAMincho) のボールドに EpsonFutoMincho, ゴシック (IPAGothic) に EpsonFutoKakugo をそれぞれ対応させる。
<match target="pattern" >
 <test name="family" >
   <string>IPAMincho</string>
 </test>
 <test compare="more" name="weight" >
   <const>medium</const>
 </test>
 <edit mode="assign" name="family" >
   <string>EPSON 太明朝体B</string>
 </edit>
</match>
<match target="pattern" >
 <test name="family" >
   <string>IPAGothic</string>
 </test>
 <test compare="more" name="weight" >
   <const>medium</const>
 </test>
 <edit mode="assign" name="family" >
   <string>EPSON 太角ゴシック体B</string>
 </edit>
</match>
ここでフォント名はフォントそのものに埋め込まれている名前 (fc-listで表示される)を書く。UTF-8 なら local.conf も UTF-8 にする。

ビットマップを抑制

武藤さんの日記にあるとおりなので、/etc/fonts/local.conf に
<match target="font" >
  <edit mode="assign" name="embeddedbitmap">
    <bool>false</bool>
  </edit>
</match>
を書く。

「〜」(波ダッシュ、U+301C)

IPAフォントでは「〜」(波ダッシュ、U+301C)が表示されない。これについてはいろいろ意見があるだろうが、現実問題として、Firefoxであちこちのサイトを見る場合などかなり鬱陶しい。 根本的解決でなくても、表示する際に fontconfig あたりで置換することはできないのだろうかと思って検索してみると、やはり既にパッチがあった。 上記のもののうち必要な部分だけを取り出し、最新の fontconfig (2.4.1)に行番号を合わせたものを置いておく。 まず apt-get source fontconfig でソースを持ってくる。ディレクトリ debian/ の下にpatches/ というディレクトリを作り、その下に上記のパッチを置く。その際ファイル名の拡張子は .patch とか .diff にする。 あとは dpkg-buildpackage -rfakeroot で、自動的にパッチを当てながらパッケージができる。 パッケージをインストールした後、fc-cacheを忘れずに。
  1. GRASS国際化版オープンプリンティングプロジェクトで入手できる。
  2. もしCD-ROMを紛失したならEPSONダウンロードサービスから入手可能。
  3. そして前述のようにこの指定が最後に来て有効になるようにして。抑制しておかないと太字にデザインされたフォントをさらにボールド化しようとして醜くなる。

dvips

しばらく前からdvips(dvipsk-ja)が dvips: ! Couldn’t find header file 8r.enc というエラーを吐いて動かない。いろいろ探しまわって、[[http://2chlinux.dtdns.net/2ch-debian/1139890780/79.html|2ちゃんねるDebianスレ]]で、 /etc/texmf/texmf.d/70dvipsj.cnfを TEXPSHEADERS.dvips = .;$TEXMF/{dvipsj,dvips,pdftex,tex,fonts/type1,fonts/enc}// と書き直せばいいことがわかった。 と思ったら、今度は mktexpk: don’t know how to create bitmap font for rml のエラー。これまた探しまわって、 >現在testingのdvipsk-jaは/etc/texmf/dvipsj以下のmapを読まないようなので というのをやはり[[http://2chlinux.dtdns.net/2ch-debian/1139890780/105.html|2ちゃんねるDebianスレ]]に見つけた。dvipsj/ は読まないが dvips/は読むということらしい。うちには/etc/texmf/dvips/というディレクトリはなかったので、 ln -s dvipsj dvips としたらたちまち動き出した。