_ [comp] uim で MozFx と sylpheed と uim-xim が SEGV

0.4.8alpha1 以来、MozFx と sylpheed が SEGV することがある。死ぬ条件は何かを入力しようとしたときだけど、いつも起きるわけではない。で、0.4.8 正式版にしてから遭遇するようになっただけで、もしかしたらそれ以前でも可能性はあったのかもしれないけど、uim-xim までも何か入力しようとしたらいきなり SEGV るようになった。バックトレースを見てみるとやはり uim_quit が大量に呼ばれて最後に死んでいる。 また、sylpheed で新しい SEGV り方が。返信しようとしてメッセージ作成ウィンドウが出た瞬間即死。これもやはり uim_quit が数十回呼ばれて SEGV っている。 あまり話が出てこないし、もしかしたら自分とこの環境がおかしいのかなぁと思って探してみたら、同じ現象っぽいのを発見。> [ggo-discussion] Re: Segmentation fault でもこれって先月の話か…。

_ [comp] swsusp2 (swappartition+swapwriter) を試す

前回は MOBILITY RADEON 9600 で成功していたので、今回は GeForce4 Ti 4200 で。

  1. kernel 2.6.12.4 に Stable Patches 2.1.9.5 を当てる。UNICON patch が当たっていてもそのまま当たった。
  2. Patching the kernel の通りに kernel config。また、/dev/agpgart (AGP Support) は n にしておく。

     CONFIG_SUSPEND2=y
     CONFIG_SUSPEND2_FILEWRITER=y
     CONFIG_SUSPEND2_SWAPWRITER=y
     CONFIG_SUSPEND2_USERSPACE_UI=y
     # CONFIG_SUSPEND2_TEXT_MODE is not set
     CONFIG_SUSPEND2_DEFAULT_RESUME2=""
     # CONFIG_SUSPEND2_KEEP_IMAGE is not set
     CONFIG_SUSPEND2_CHECK_RESUME_SAFE=y
    	
     CONFIG_CRYPTO_LZF=y
    	
     CONFIG_AGP=n
    
  3. kernel compile & install。
  4. DistroAndHardwareSetup/Nvidia によると、nvidia-kernel-source の modules/nvidia-kernel/nv/nv.c に1行追加する必要がある。これをしておかないと、レジューム後に画面がぐちゃぐちゃになって言うことを聞かなくなる。

          switch (state)
          {
     +        case PM_SUSPEND_STANDBY:
              case PM_SUSPEND_MEM:
    

    さらに、kernel config で CONFIG_AGP=n していれば必要ないけれど、そうでない場合は kernel の AGPGART を使わないように modules/nvidia-kernel/nv/nv-linux.h を修正。

     +/*
      #if defined (CONFIG_AGP) || defined (CONFIG_AGP_MODULE)
      #define AGPGART
      #include <linux/agp_backend.h>
      #include <linux/agpgart.h>
      #endif
     +*/
    
  5. kernel の AGPGART ではなく NVAGP を使うように /etc/X11/xorg.conf を修正。

      Section "Device"
              Identifier      "Generic Video Card"
              Driver          "nvidia"
     +        Option          "NvAgp" "1"
      EndSection
    
  6. hibernate を install。
  7. /boot/grub/menu.lst のカーネルパラメータに追加。スワップパーティションがあるので、それを指定。ここでは /dev/hda2 がスワップパーティションであるとする。

     kernel          /boot/vmlinuz-2.6.12.4-XXXXXXXX root=/dev/hda1 ro resume2=swap:/
     dev/hda2
    
  8. 電源ボタンを押したらサスペンドするように /etc/acpi/powerbtn.sh を編集。

     -    /sbin/shutdown -h now "Power button pressed"
     +    /usr/sbin/hibernate
    
  9. このまま /usr/sbin/hibernate を実行すると

     # /usr/sbin/hibernate
     Some modules failed to unload: nvidia
     hibernate: Aborting suspend due to errors in ModulesUnloadBlacklist (use --force
      to override).
    

    とエラーが出てサスペンドしない。/usr/sbin/hibernate –force してもいいようだけど、/etc/hibernate/blacklisted-modules から nvidia を撤去。

     -nvidia
      acx100
      acx_pci
      prism54
    

途中何度もやり直したけど、サスペンドとレジュームはできるようになった。ところが、X 上でサスペンドしてレジュームした後に X を終了させると、画面がぐちゃぐちゃになる。入力は受け付けてるみたいなので、そのまま X を上げ直せば一応使い続けることができる。DistroAndHardwareSetup/Nvidia によるとフレームバッファを使っているとそのような現象になるようだ。確かにこのマシンでは VESA framebuffer を使っている。今のところ回避方法はないようだ。

_ [comp] hibernate + chvt

swsusp2 で X11 の画面が乱れる件について。
どうしようもないかんじなので、hibernate かける前に chvt で逃げて、復帰後に chvt で戻るようなスクリプトを使ってます。これなら実用上問題ないし。

ref. 瑠璃色!絵日記

なるほど、そういう手が。