更新日時: 2014(平成26)年 2月15日(土) 午後01時54分54秒
開発コード名 Saucy Salamander
Ubuntu 12.04 LTSのときは、
~/Pictures
と~/.shotwell
をDVD-Rにバックアップするシェルスクリプトを使っていたが、
~/.shotwell
は、
Shotwell 0.13.0以降に~/.local/share/shotwell
に変更された模様。
Xをロックするつもりが、ゲストセッションに切り替えてしまった。
ゲストセッションのindicator barには何も表示されず、
ログアウトまたはセッションを変更して元に戻るすべがない(不具合か仕様か分からない)。
CLIは使えるので、コマンド名を調べるとgnome-session-quit
らしい。
$ gnome-session-quit --logout
ただ、これでは「ログアウトかロックか」とGUIで尋ねてくるので、次のようにした方が楽だ。
$ gnome-session-quit --logout --no-prompt
ログアウトの他にも、--power-off
や--reboot
が用意されている。
必要なファイルがどのパッケージに収録されているのか分からないときがある。 そのようなときには、apt-fileで検索する。たとえば、odp2pptを探す。
$ apt-cache search odp2ppt
普通に検索するとodp2pptは見つからない。しかし、apt-fileを使うとodp2pptを含むパッケージが検索できる。
$ apt-file search odp2ppt unoconv: /usr/bin/odp2ppt unoconv: /usr/share/man/man1/odp2ppt.1.gz
どうやらodp2pptはunoconvというパッケージに収録されているらしい。
Beamerで作成したスライドPDFファイルをMicrosoft PowerPoint (ppt)形式に変換する。
$ sudo apt-get install python-odf unoconv
latexslidesに含まれるpdf2odpを取り出して、 26行目を下記の通りに修正した後に、パスの通った場所に置く。
$ diff latexslides-0.31/bin/pdf2odp ~/bin/pdf2odp 26c26 < if ext != 'pdf': --- > if ext != '.pdf':
下記のbashスクリプトをpdf2ppt.sh
と名前をつけて、
実行権限をつけてパスの通った場所に置く。
#!/bin/sh if [ $# -eq 0 ] then echo USAGE: $0 pdf-file fi _FILE1=${1%pdf}odp _FILE2=${1%pdf}ppt pdf2odp $1 odp2ppt ${_FILE1} [ $? -eq 0 ] && echo ${_FILE2}を出力しました
Beamerで作成したjsph72-slide.pdfをpdf2ppt.shでpptに変換する。
$ pdf2ppt.sh jsph72-slide.pdf Converting jsph72-slide.pdf to images using gs GPL Ghostscript 9.10 (2013-08-30) Copyright (C) 2013 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Processing pages 1 through 10. Page 1 Page 2 [snip] Page 9 Page 10 Done... Presentation saved as jsph72-slide.odp jsph72-slide.pptを出力しました
正常に変換できた。pdf2odpはGhostscriptでpdfを1頁ずつpngに変換するが、 その時のgsコマンドのオプションは、pdf2odpにハードコーティングしている。 「-dNOPAUSE -dSAFER -dBATCH -sDEVICE=pngalpha -r300」となっているが、 必要に応じて、pdf2odpを編集した方がよいかも。
XIM経由でATOK X3から日本語入力できているが、 SaucyでもIIIMECFも使いたい。未実行(2013年9月11日)。
つっかり、emacs-goodies-elをインストールするのを忘れていたことが原因。 emacs-goodies-elに含まれるhtmlize.elが存在しないと、 HTML出力したときの整形済みテキストのクラスがsrcではなくexampleになる。
$ sudo apt-get install emacs-goodies-el
CRANでUbuntuSaucyをサポートするのは、正式リリース以後のことだろう。 しばらくは、UbuntuSaucyのリポジトリに入っているr-cran-* と、 CRANのtarボールで我慢する。 というか、Rパッケージの最新版は、CRANのtarボールしかない訳だが。
$ sudo apt-get install r-base-core
r-base-coreと同時に、build-essentialの類が入るようだ。 パッケージをコンパイルしなくてはいけないので当然だが、 後でインストールしようと思っていたので、好都合。 R version 3.0.1 (2013-05-16) — "Good Sport" が入った。
今のところなし
Rのライブラリパッケージ数は2013年9月11日現在で次の通り。
$ apt-cache search r-cran | wc -l 183
当面必要なものを入れる。
$ sudo apt-get install r-cran-maptools r-cran-surveillance r-cran-chron r-cran-cairodevice r-cran-class r-cran-colorspace r-cran-date r-cran-foreign r-cran-coda r-cran-codetools r-cran-kernsmooth r-cran-lattice r-cran-mapdata r-cran-mgcv r-cran-rgl r-cran-xml r-cran-survival r-cran-sp r-cran-stringr r-cran-teachingdemos r-cran-tkrplot r-cran-timedate r-cran-scatterplot3d r-cran-rjava r-cran-rgtk2 r-cran-plotrix r-cran-plyr r-cran-misc3d r-cran-maps r-cran-mapproj
gdalの開発ヘッダファイルのパッケージはlibgdal1-devとlibgdal-devの2つある。 もちろん互いにConflictsなのだけど、バージョンは全く同じ。libgdal-devを入れる。 依存パッケージが大量に入る。都合がよいことに、libgeos-devも一緒に入る。 libproj-devは一緒に入らないみたいなので、一緒にインストールする。
$ sudo apt-get install libgdal-dev libproj-dev $ cd /tmp && sudo R
> install.packages("rgdal")
パッケージを追加するたびに、いちいちミラーサイトを尋ねられるのは面倒なので、
バックアップから$HOME/.Rprofile
を復元した。
内容は1行だけ。
$ tail -1 .Rprofile options(repos="http://essrc.hyogo-u.ac.jp/cran")
texliveを入れる。yatexを入れると、日本語関連がごっそり入った。 xdvik-jaを追加インストール(2013年9月10日)
$HOME/texmf
と$HOME/.texmf-var
をバックアップから復元。
12.04のeuc-jpな日本語TeX環境から、 UTF-8な日本語TeX環境へ移行できたことを確認した。
しかし、dviのプレビューが失敗。
$ xdvi delme.dvi
xdvi: Warning: Unable to find "pxdvi.cfg"!
[snip]
ためしに、pxdvi.cfgをローカルにおいたら、
正常に日本語が表示された。
別解として、環境変数XDVIINPUTSにpxdvi.cfgの場所を入れておく方法があるらしい。
$HOME/.bashrc
に下記を追記して解決
$ tail -3 .bashrc ## 2013年9月10日 ## Ad Hocな対処 export XDVIINPUTS=/etc/texmf/xdvi
修正前 | 修正後 |
---|---|
IPAPMincho | IPAMincho |
$ fc-match Ryumin-Light ipamp.ttf: "IPA P明朝" "Regular" $ fc-match GothicBBB-Medium ipagp.ttf: "IPA Pゴシック" "Regular"
検索して調べてみると、フォントを埋め込んでいないPDFファイルの場合、 Ryumin Lightフォントがどんなフォントで表示されているのかが、 問題になるが、固定幅ではなくて、プロポーショナルフォントを当ててしまうと、 上記のスクリーンショットのように悲惨な状態で表示されるようだ。 「IPA P明朝」から「IPA 明朝」に変更することで解決を図る。
フォントの設定は$HOME/.fonts.conf
に書いてきたが、これは廃止されるらしい。
今後は${XDG_CONFIG_HOME}/fontconfig/fonts.conf
らしい。
環境変数XDG_CONFIG_HOMEは未設定で中が空だった。
環境変数XDG_CONFIG_HOMEが未設定の場合は、${HOME}/.config
を参照するらしい。
そこで、$HOME/.config/fontconfig/fonts.conf
を作成することにする。
$ mkdir .config/fontconfig $ vi .config/fontconfig/fonts.conf $ cat .config/fontconfig/fonts.conf <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- Ryumin-Light を IPA明朝に --> <match target="pattern"> <test name="family" compare="contains"> <string>Ryumin</string> </test> <edit name="family" mode="prepend" binding="strong"> <string>IPAMincho</string> </edit> </match> </fontconfig>
ログアウト&ログインしても、「IPA P明朝」に割り当てられたまま。
$ fc-match Ryumin ipamp.ttf: "IPA P明朝" "Regular"
昔の経験から推測してキャッシュが残っているためと判断し、 キャッシュをクリアする。
$ fc-cache -f $ fc-match Ryumin ipam.ttf: "IPA明朝" "Regular"
成功した。
MacOSXで、CLIとCUIの架け橋となるopenコマンドを知って、 その便利さに驚愕し、Linuxでも同等のコマンドが存在するに違いなと探し当てたのが、 このgnome-open。
CLIとCUIの架け橋となるgnome-openは日々大活躍している。
この系統のコマンドには、いくつかバリエーションがある。
名称 | デスクトップ環境 | 収録パッケージ |
---|---|---|
exo-open | XFCE | exo-utils |
gnome-open | GNOME | libgnome2-bin |
kde-open | KDE | kde-runtime |
xdg-open | 汎用 | xdg-utils |
gvfs-open | GNOME? | gvfs-bin |
xdg-openはシェルスクリプトで、中を読んでみると、 デスクトップ環境を判定して、たとえば KDEなら、kde-openを実行するなど、 適宜判断してくれるようだ。 パフォーマンスの点から、GNOMEに決まっているなら、 xdg-openではなく、gnome-openを直接使った方がよさそう。
gnome-openによって起動されるアプリケーションは、 登録されているMIMEタイプによって決まる。 どのアプリなのか調べるには、こんな感じ。
$ xdg-mime query filetype output.pdf application/pdf $ xdg-mime query default application/pdf evince.desktop
gvf-mimeでも同様のことができるみたいだ。
$ gvfs-mime --query application/pdf
Default application for 'application/pdf': evince.desktop
Registered applications:
evince.desktop
gimp.desktop
gv.desktop
evince-previewer.desktop
display.im6.desktop
Recommended applications:
evince.desktop
gimp.desktop
gv.desktop
evince-previewer.desktop
display.im6.desktop
割り当てるアプリを変更することももちろんできる。 application/pdfにevinceを割り当てるにはこんな感じ。
$ xdg-mime default evince.desktop application/pdf
このdesktoファイルは必ずしも、
/usr/share/applications
にあるものでなくてもよくて、
$HOME/.local/share/applications
においているものでもよいらしい(未検証)。
Linuxマシンは10年たっても、 プリンタが鬼門。
このプリンタはPostScript互換のBRscript対応の複合機レーザプリンタ
$ sudo apt-get install brother-cups-wrapper-laser $ dpkg -L brother-cups-wrapper-laser | grep MFC8870DW /usr/lib/cups/filter/brlpdwrapperMFC8870DW /usr/share/ppd/Brother/MFC8870DW.ppd
Choose Driverで、ドライバ候補が見つからなかったみたいで、 Local Driverを選択すると、延々と検索している。 かれこれ1時間以上検索してる。
これはGUIツールなど使わずに、 lpadminでバシッと設定した方が楽だと思う。
まずは接続可能なディバイスURIを調べる。
$ lpinfo -v network beh network socket network ipps serial serial:/dev/ttyS1?baud=115200 network smb network https network http direct hp network ipp network lpd network ipp14 direct usb://Brother/MFC-8870DW?serial=xxxxxxxxxx direct hpfax network socket://xxx.xxx.xxx.xxx network socket://xxx.xxx.xxx.xxx network lpd://LP-S820-CC67B3/print network socket://xxx.xxx.xxx.xxx
MFC-8870DWのディバイスURIがわかったところで、 lpadminコマンドを実行する。
$ lpadmin -p MFC-8870DW -v usb://Brother/MFC-8870DW?serial=xxxxxxxxxx -P /usr/share/ppd/Brother/MFC8870DW.ppd
$ cupsaccept MFC-8870DW
cupacceptを実行しないと、下記のようにジョブを拒否される。
$ lpr -P MFC-8870DW tmp.ps
lpr: Destination "MFC-8870DW" is not accepting jobs.
無事に、テストプリント成功。 GUIの方法しか知らなかったら、泥沼に入るところだった。
MFC-8870DWは複合機だが電話回線は接続していない。 スキャナも設定が楽なMacOSXから使っている。 しかし、故障しているのか、仕様なのか無線LANとの接続がぶちぶち切れるので、 MacOSXから無線LAN経由でMFC-8870DWを使って成功するのはまれである。 緊急時にはUSB接続に切り替える必要あり。
UbuntuマシンにはUSB接続しているので、こちらからもスキャナを使えるようにする。 USB接続なのでベンダIDとプロダクトIDを調べておく。
$ lsusb |grep MFC Bus 001 Device 004: ID 04f9:01a7 Brother Industries, Ltd MFC-8870DW Printer
MFC-8870DWのbrscan2スキャナードライバー 64bitとスキャンキーツール64 bitをBrotherのサイトからダウンロードする。 これらのプログラムはSANEシステム上で動作するとのこと。
$ dpkg -l |grep sane ii libsane:amd64 1.0.23-0ubuntu3 amd64 API library for scanners ii libsane-common 1.0.23-0ubuntu3 amd64 API library for scanners -- documentation and support files ii libsane-hpaio 3.13.9-1 amd64 HP SANE backend for multi-function peripherals ii sane-utils 1.0.23-0ubuntu3 amd64 API library for scanners -- utilities ii xsane 0.998-5ubuntu1 amd64 featureful graphical frontend for SANE (Scanner Access Now Easy) ii xsane-common 0.998-5ubuntu1 all featureful graphical frontend for SANE (Scanner Access Now Easy)
ドライバとツールのインストール
$ sudo dpkg -i ~/Downloads/brscan2-0.2.5-1.amd64.deb
次に、ここに従い、brother-udev-rule-type1-1.0.0-1.all.debをインストールする。 念のために、中身をチェックしてからインストールする。 lessコマンドで中身を見ることができる。
$ less ~/Downloads/brother-udev-rule-type1-1.0.0-1.all.deb $ sudo dpkg -i ~/Downloads/brother-udev-rule-type1-1.0.0-1.all.deb
libsane.rules
にMFC-8870DWを追加する。
/lib/udev/rules.d/40-libsane.rules
の1307行目にLABEL="libsane_usb_rules_end"があるので、
この上のあたり、1301行目にDell 1600nの設定があるが、この下あたりに、
「ATTRS{idVendor}=="04f9", ATTRS{idProduct}=="01a7", ENV{libsane_matched}="yes"」という行を挿入する。
後で分かるようにコメント文も一緒に入れる。
下記は編集後の/lib/udev/rules.d/40-libsane.rules
$ grep -nA1 MFC-8870DW /lib/udev/rules.d/40-libsane.rules 1303:# Brother MFC-8870DW 1304-ATTRS{idVendor}=="04f9", ATTRS{idProduct}=="01a7", ENV{libsane_matched}="yes"
ここらあたりで、udevで認識させるために、再起動する。 次に、スキャンキーツールをインストールする。 スキャナードライバーとsane-utilsモジュールの両方が事前に必要らしいが、 両方ともインストールしている。
$ sudo dpkg -i /home/umusus/Downloads/brscan-skey-0.2.4-1.amd64.deb
Ubuntu 13.10 amd64の場合はこのままでは動作しない。ここにある「Ubuntu11.10 64ビット版において、 スキャンができません」と同じ処理が必要。 ここははまるポイントなので注意する。
$ sudo cp -d /usr/lib64/libbr* /usr/lib $ sudo cp -d /usr/lib64/sane/* /usr/lib/sane $ brscan-skey $ brscan-skey --list MFC-8870DW : brother2:bus8;dev2 : USB Active
きちんと認識しているようだ。 実際のスキャンはxsaneのライブラリを使うスキャンアプリで行う。
$ simple-scan
正常に使えた。
ちなみに、brscan-skeyはヘルプが用意されていない不親切設計。
$ brscan-skey --help
Copyright 2007-2012 Brother Industries, Ltd
$ brscan-skey -h
Copyright 2007-2012 Brother Industries, Ltd
$ man brscan-skey
brscan-skey というマニュアルはありません
See 'man 7 undocumented' for help when manual pages are not available.
仕方がないので、中身を読んでみる。
オプション | 機能 |
---|---|
オプションなし | 全てのMFC機種を登録 |
-t または —terminate | このプログラムを終了 |
-a または —add MFC | 特定のMFC機種を登録 |
-d または —delete MFC | 特定のMFC機種の登録を解除 |
-p または —passwd パスワード | パスワードの設定 |
-u または —username ユーザ名 | ユーザ名の設定 |
-l または —list | 利用可能なMFC機種の一覧 |
-m または —mailto | メールアドレス (スキャンEメール機能用) |
—refresh | 設定を元に戻す |
—reset | 設定の初期化 |
—diagnosis | 診断データの表示 |
-h または —help | 上記の通り不親切 |
実質的に必要はなのは、「オプションなし」か「—list」くらいだろう。
brscan-skeyをオプションなしで起動させた状態で、
MFC-8870DWの方でスキャンボタンを押下し、
イメージを選択すると、液晶に「PCに接続中」と表示され、
自動的にスキャンが行われた。
Ubuntuマシンの方は、Gimpが自動的に起動して、スキャンした画像が表示された。
ファイルは$HOME/brscan
配下に置かれていた。
PCからもスキャナからもスキャンを実行できるので便利だ。
MFC-8870DWは両面スキャンに対応している。 自動両面スキャンを行うには、XSaneで、スキャンソースを「Auto Document Feeder(Duplex)」 に設定するらしい(未確認)。
PostScript3対応のカラーレーザープリンタ。 EPSONのドライバーダウンロードで検索しても、 LP-S820のLinux用ドライバは2013年9月10日現在まだ用意されていない。 プリンタのIPアドレスでProbeすると、 接続形態の候補がいくつも出てきた。 「LPD/LPR queue 'PASSTHRU'」を選んでみる。 Searching for dirversをウインドウが出て、延々と検索している。
EPSON LP-S310 Foomatic/eplaser-jp [en] (recommended) がドライバの候補に挙げられた。これってモノクロだし、 PostScript3対応じゃない。
GenericのRaw Queueにすると正常に印刷できた。
$ lpr -PLP-S820 tmp.ps
Driverの選択で「Generic PostScript Printer Foomatic/Postscript [en] (recommended)」 を選択すると、プリンタがハングアップするようだ。 プリンタにpingすら通らなくなる事態になった。
詳細は不明。共用プリンタでそれほど試行錯誤できない。
$ grep -E '(LanguageLevel|ColorDevice)' /etc/cups/ppd/Generic-PostScript.ppd *LanguageLevel: "3" *ColorDevice: True
そもそもfoomaticのppdファイルが、個別になっていなくてデータベース化しているので、 何ともやりにくいが、ダミーのプリンタエントリを作成して、/etc/cups/ppdにおかれたppdファイルをみると、 ちゃんと、カラー対応、PostScript3になっている。 何が悪いのか欲からない(2013年9月11日)。 Raw Queueなら印刷できるが、使い勝手が悪い。
このプリンタは「PostScript3対応なのでOSを問いません」という印象を受ける宣伝文句だった気がしないでもないが、 今、EPSONのWebを見たら、しっかりWindows/MacOSXのみ、しかもMacOSXはPSのみという書き方だった。 初心者のLinuxユーザからクレームが殺到したのかもと想像してみる。
ドキュメントビューア(Evince 3.10.0)からPDFの印刷をするケースが多いが、 印刷ジョブを送信するとLP-S820がハングアップする(pingが通らなくなる)PDFとそうでなく正常に印刷できるPDFがあり、 その差がよく分からない。 ハングアップしてしまうと電源ON/OFFで再起動させるしか対処方法がない。
EPSONのレーザプリンタには長年お世話になっており、 中傷するつもりは全くないが、 LinuxユーザにはEPSONと特に鬼門であると言わざるを得ない。
プリンタはHewlett-Packardの一択だという意見を散見するが、 Hewlett-Packardのプリンタを使った経験はない。
プリンタのIPアドレスでProbeすると、 接続形態の候補がいくつも出てきた。 「LPD/LPR queue 'PASSTHRU'」を選んでみる。 Searching for dirversをウインドウが出て、延々と検索している。 EPSON LP-S7500 Foomatic/eplaser-jp [en] (recommended)を探し当てた。
sshログインをしたとき、2つめ(pts/1)から、 「システムの再起動が必要です」が表示されるようになる。再起動した後でも。 この表示の正体は↓これ。
cat /var/run/reboot-required *** システムの再起動が必要です ***
再起動後はreboot-required
が空になると思うが、
このファイルの内容を消すのに失敗しているようだ。
因みに、
$ tail -3 /var/run/reboot-required.pkgs linux-image-extra-3.11.0-12-generic linux-base dbus
2013年10月15日。久しぶりにUbuntuマシンにiPhoneを接続すると、 iPhone上に「このコンピュータを信頼しますか?」をいうダイヤログが表示される。 「信頼」を押下しても、同じダイヤログがまたすぐにポップアップされる。 エンドレス。本来は1度きりなはず。
αやβはisoファイルをリリースせずに、Daily Buildのisoファイルを配布する方針に変更したらしい。
2013年9月6日にβ1がリリースされた。そろそろインストールしてもよいだろう。
saucy-desktop-amd64.iso
をダウンロードした(2013年9月10日)。
インストーラ曰く、最低5.9GBのディスクの空き容量が必要とのこと。
とりあえず、VirtualBoxに入れて、ATOK X3がちゃんと動くことを確認した。 メインマシンに入れる。 β版のためか、インストーラの途中でネットワーク設定を行うことができず、 DHCP環境を前提としていてネットワークエラーが繰り返し表示された。 固定IPアドレス環境でも、インストールできたが、 ネットワーク接続を前提としたインストーラの配慮が、 ことごとくなされないので、自分ですることになる。 β版なので当たり前といえば当たり前だが、 固定IPアドレス環境の初心者にはかなり高いハードルになると考えられる。
$ lsb_release -drc Description: Ubuntu Saucy Salamander (development branch) Release: 13.10 Codename: saucy
正式リリースは2013年10月17日だけど、 2013年10月15日の時点ですでにdevelopment branchが取れていた。
$ lsb_release -d Description: Ubuntu 13.10
locateを使えるようにする。
$ sudo updatedb
時刻サーバと同期する。
$ sudo apt-get install ntp $ sudo vi /etc/ntp.conf $ sudo /etc/init.d/ntp stop $ sudo ntpdate ntp.xxxx.xxxx.xx $ sudo /etc/init.d/ntp start
確認する。
$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== -ntpxx.xxx.xxxx. xxx.xxx.xxx.xxx 3 u 18 64 377 0.210 148.688 5.616 +www.4koma.com 133.243.238.244 2 u 29 64 377 32.624 144.071 4.665 +ns1.dns.jp.net 133.243.238.244 2 u 17 64 377 20.162 137.134 9.157 +ns3.khresear.ch 10.84.87.146 2 u 25 64 377 18.322 150.623 6.617 *vps.jre655.com 133.243.238.164 2 u 18 64 377 20.208 140.286 6.683 +europium.canoni 193.79.237.14 2 u 9 64 367 253.589 151.109 8.527
Saucyをクリーンインストールするにあたり、
インストール作業前に最新の$HOME
のバックアップをとったが、
これを丸ごと戻すとゴミまで戻るので必要なものを厳選してバックアップから復元。
$HOME/.bashrc
などbash周りをバックアップから復元。
$HOME/.ssh
をバックアップから復元。
$HOME/.VirtualBox
をバックアップから復元。
$HOME/bin
をバックアップから復元。
そのほかは、必要が生じたときにその都度、バックアップから復元することにする。
System Settings→Appearance→Behaviorで、Enable workspacesにチェックを入れる。
$ gsettings set org.gnome.desktop.interface gtk-key-theme Emacs
$ less /usr/share/doc/lightdm/lightdm.conf.gz
これを読むとlightdm.conf
の書き方を説明してくれているが、
どうも、allow-guest=falseを追記すれば良さそうだ。
未実行(2013年9月11日)
$ sudo apt-get remove overlay-scrollbar
このままでは、Gtkアプリに「Gtk-Message: Failed to load module "overlay-scrollbar"」 と毎回文句を言われる。
$ gsettings list-recursively |grep scrollbar org.gnome.desktop.interface ubuntu-overlay-scrollbars true $ gsettings set org.gnome.desktop.interface ubuntu-overlay-scrollbars false $ gsettings get org.gnome.desktop.interface ubuntu-overlay-scrollbars false
13.04とキーの名前が違うらしいので、注意。 しかし、効果なし。 調べてみると、13.04でもすでにLaunchpadに報告されている不具合だ。
環境変数を眺めていて、GTK_MODULESが怪しいことに気がついた(2013年9月11日)。
$ echo $GTK_MODULES overlay-scrollbar:unity-gtk-module $ export GTK_MODULES=unity-gtk-module $ emacs -q
試しに、環境変数GTK_MODULESからoverlay-scrollbarを取り除いてみると、
何もGtk-Messageが表示されない。 成功。
あとは、どのタイミングでこの環境変数を設定するかだ。
とりあえず$HOME/.bashrc
に追記。
$ tail -3 .bashrc ## 2013年9月11日 ## Gtk-Message: Failed to load module "overlay-scrollbar" を非表示に export GTK_MODULES=unity-gtk-module
もっとも大事なソフトウェアの1つであるEmacs。 これがないと何もできない無力感に悩まされるし、 Emacsがあると何でもできる気になってくる。
バックアップから$HOME/.emacs.d
、
及び$HOME/.hunspell_default
を戻す。
emacsおよび、Emacsで使用するように設定されているもの(ess, muse-el, fonts-inconsolata)のインストール。$HOME/.recentf
は戻さず。
リリースからかなりの年数を経たATOK X3は、 時代から取り残される様相を呈していたが、 GTK+3.0に対応したiiimgcfを公開してくれる人が出現した(ATOK 3X for GTK+ 3.0.)。
ソースやビルドの手順はこちら→iiimgcf for GTK+3.0
これにより、Saucyでも(正確にはGTK+3.0アプリでも)問題なくATOK X3は使える。 大変ありがたい。
ATOK X3は32bit版アプリなので、64bit環境では別途32bitパッケージをインストールする。 具体的にどのパッケージが必要であるが、精査する必要があると思うが、 ここはインターネットに書かれたリストをそのまま使う。
$ sudo apt-get install gtk2-engines:i386 gtk2-engines-murrine:i386 gtk2-engines-oxygen:i386 gtk2-engines-pixbuf:i386 libgtk2.0-0:i386 libice6:i386 libpam0g:i386 libsm6:i386 libstdc++6:i386 libwrap0:i386 libxml2:i386 libxt6:i386 $ sudo apt-get install im-switch
なお、gtk-query-immodules-2.0 (i386)は、libgtk2.0-0:i386に収録されている。 また、im-switchをインストールする必要があるらしい。
$ find /usr -name gtk-query-immodules-2.0 /usr/lib/i386-linux-gnu/libgtk2.0-0/gtk-query-immodules-2.0 /usr/lib/x86_64-linux-gnu/libgtk2.0-0/gtk-query-immodules-2.0 $ find /usr -name gtk.immodules
gtk.immodules
は存在しない。
ATOK X3のインストール中にこのファイルが存在しないと、
インストーラが先に進まないようになっているため、これらを作成する。
インストーラのプロンプトに督促されている状態で、
別のgnome-terminalから作成するのも可。
$ sudo touch /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/gtk.immodules $ sudo touch /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/gtk.immodules
準備ができたところで、setupatok_tar.sh
を実行して、
インストールを開始する。
CD-ROMのマウント先は、/media
ではなくて/media/$USER
になっている。
$ cd /media/$USER/ATOKX3/ $ LANG=C sudo bash setupatok_tar.sh This software is furnished under an end user agreement and may be used or copied only in accordance with the terms of such license. If you accept the terms of the license agreement,Please select "Yes". If you do not accept the terms of the license agreement,Please select "No". ? (yes/no)yes Input path of gtk-query-immodules-2.0 for 32bit application:/usr/lib/i386-linux-gnu/libgtk2.0-0/gtk-query-immodules-2.0 Input path of gtk-query-immodules-2.0 for 64bit application:/usr/lib/x86_64-linux-gnu/libgtk2.0-0/gtk-query-immodules-2.0 Input path of gtk.immodules for 32bit application:/usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/gtk.immodules Input path of gtk.immodules for 64bit application:/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/gtk.immodules tar xfz /media/$USER/ATOKX3/bin/tarball/IIIMF/iiimf-client-lib-trunk_r3104-js3.i386.tar.gz tar xfz /media/$USER/ATOKX3/bin/tarball/IIIMF/iiimf-gtk-trunk_r3104-js3.i386.tar.gz tar xfz /media/$USER/ATOKX3/bin/tarball/IIIMF/iiimf-protocol-lib-trunk_r3104-js3.i386.tar.gz tar xfz /media/$USER/ATOKX3/bin/tarball/IIIMF/iiimf-server-trunk_r3104-js3.i386.tar.gz tar xfz /media/$USER/ATOKX3/bin/tarball/IIIMF/iiimf-x-trunk_r3104-js3.i386.tar.gz tar xfz /media/$USER/ATOKX3/bin/tarball/IIIMF/iiimf-client-lib-64-trunk_r3104-js3.x86_64.tar.gz tar xfz /media/$USER/ATOKX3/bin/tarball/IIIMF/iiimf-gtk-64-trunk_r3104-js3.x86_64.tar.gz tar xfz /media/$USER/ATOKX3/bin/tarball/IIIMF/iiimf-protocol-lib-64-trunk_r3104-js3.x86_64.tar.gz "/usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/gtk.immodules" will be changed. "/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/gtk.immodules" will be changed. Cannot load module /usr/lib/gtk-2.0/immodules/im-iiim.so: /usr/lib/gtk-2.0/immodules/im-iiim.so: wrong ELF class: ELFCLASS32 /usr/lib/gtk-2.0/immodules/im-iiim.so does not export GTK+ IM module API: /usr/lib/gtk-2.0/immodules/im-iiim.so: wrong ELF class: ELFCLASS32 tar xfz /media/$USER/ATOKX3/bin/tarball/ATOK/atokx-20.0-3.0.0.i386.tar.gz tar xfz /media/$USER/ATOKX3/bin/tarball/ATOK/atokx-64-20.0-3.0.0.x86_64.tar.gz Installation has been completed.
im-iiim.so
がエラーをはいているが、
後でiiimgcf for GTK+3.0のim-iiim.so
で差し替えるので、気にしない。
再起動をする。うまく再起動できなかったので、別のマシンからsshログインして、 再起動した。
ここに書いてある「アップデート方法」の解説に従って、 update-atokx3-half.zipをダウンロードして、インストール。 (atokx3upが必要な古いATOK X3インストールメディアを持っている場合は、 この方法ではない)
$ unzip update-atokx3-half.zip $ sudo dpkg -i update-atokx3-half.deb
このupdate-atokx3-half.debにはコンパイル済みのim-iiim.so
が入っている(未確認だけど)。
これは、おそらくiiimgcf for GTK+3.0をコンパイルしたもの。
どこの馬の骨かわからないバイナリを入れられないという向きは、
iiimgcf for GTK+3.0に従って自分でコンパイルすればよいだろう。
起動の設定として、
本来なら/opt/atokx3/sample/setting_debian4.sh
を実行する必要があるが、
update-atokx3-half.debが全部面倒をみてくれるので、不要。
ありがたい。
最後に、ここを参考に、
ATOK X3を自動起動させる工夫。
別にdesktopファイルで自動起動させなくても、
~/.xsession
や~/.xprofile
に書くとか、
他にいろいろ方法があるだろうが、
まぁ、分かりやすい。
インストール直後ではautostartディレクトリが掘られていなかったので、 作成する。
$ mkdir $HOME/.config/autostart $ bash -c "echo '[Desktop Entry]'$'\n''Type=Application'$'\n''Exec=/opt/atokx3/bin/atokx3start.sh'$'\n''Hidden=false'$'\n''NoDisplay=false'$'\n''X-GNOME-Autostart-enabled=true'$'\n''Name=ATOK' > $HOME/.config/autostart/atok.desktop"
なお、システム規模でやるなら、
/usr/share/xsessions
にdesktopファイルを放り込むとよいと思う(未検証)。
バックアップから$HOME/Mail
、$HOME/.sylpheed-2.0
、
$HOME/.bogofilter
を戻す。
sylpheedとbogofilterをインストールして、
sylpheedをランチャーに登録。
ATOK X3から日本語を入力できない。
しかし、次のようにすると日本語を入力できるようになった。
$ GTK_IM_MODULE=xim sylpheed
ちなみに、
$ echo $GTK_IM_MODULE
iiim
この環境変数GTK_IM_MODULEは、
ATOK X3をインストールするときに実行したsetting_debian4.sh
によって作成された
/etc/X11/xinit/xinput.d/iiimf
の中で定義されている。
環境変数GTK_IM_MODULEにximを代入すると期待通りに動作することから、 ランチャーに登録されているdesktopファイルを編集すれば解決。
$ sudo vi /usr/share/applications/sylpheed.desktop
Exec=sylpheed %u
を
Exec=env GTK_IM_MODULE=xim sylpheed %u
に書き換える。これで解決。%u
はユーザ名だろうか。
Sylpheedがアップデートするたびに、
desktopファイルを書き換えなければいけないだろうが、
忘れないようにしなければ。
バックアップから辞書群と$HOME/.ebview
を戻して、ebviewをインストール。
ランチャーに登録。
こちらも、ATOK X3から日本語を入力できなかったが、
下記で期待通り入力できることが確認された。
$ GTK_IM_MODULE=xim ebview
従って、ランチャーに登録されているdesktopファイルを編集して解決。
$ sudo vi /usr/share/applications/ebview.desktop
Exec=/usr/bin/ebview
を
Exec=env GTK_IM_MODULE=xim /usr/bin/ebview
に書き換える。
EPWING形式の辞書は最近販売されないので、危機意識がある。 広辞苑第六版はまだ購入していないが、貴重なEPWING形式なので、 是非購入したい。
EPWING形式の辞書を自作する場合は、 FreePWINGを使うが、EUC-JPのテキストを前提としているので、 UTF-8環境では、文字コードの問題が発生する。 そこで、UTF-8に拡張したFreePWINGを公開してくれている人がいる。 大変ありがたい。 しかしながら、Saucyのリポジトリにはないので、手作業でインストールする。
SaucyのレポジトリにあるEB関連のパッケージ
名称 | 説明 |
---|---|
eb-utils | 電子ブックへのアクセス用 C ライブラリ (ユーティリティ) |
ebhttpd | CD-ROM ブックへのアクセスに特化した HTTP サーバ |
eblook | EB ライブラリを使った電子辞書検索コマンド |
ebnetd | the server of EBNET protocol |
ebnetd-common | Common files for the EBNETD suite |
epwutil | EB (電子ブック)/EPWING 用各種ユーティリティ |
freepwing | EB 形式から JIS X 4081 形式への変換ツール←これは間違っているのでは?大人の事情? |
ruby-eb | EB library interface for the Ruby |
Alt+Cntrl+tで起動することは知っているが、面倒なのでログイン直後に自動起動するよ うにしておく。
$ sudo cp /usr/share/applications/gnome-terminal.desktop /etc/xdg/autostart/
タイトルを動的に変更する設定をするのを忘れていた(2013年9月13日)。 これは以外と重要なポイント。
$ grep PROMPT .bashrc PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
gnome-openが入っていなかった。
Saucyではlibgnome2-binというパッケージ名らしい。
インストールした(2013年9月10日)。
gnome-openはタイプ数が多いので、MacOSXと同様に単にopenとaliasを設定しておく。
openという別のコマンドが存在するが気にしない。
以前はopenという名前の別のコマンドが存在していたが、
Saucyではなくなっている模様。
man openではopenvtを参照するので、openはopenvtに改名されたのかも(未確認)。
$ grep gnome-open .bashrc alias open='gnome-open'
リポジトリにあるindicatorパッケージ数は下記の通り。
$ apts '^indicator-' |wc -l
30
下記を追加する(2013年9月11日)
$ sudo apt-get install indicator-cpufreq indicator-datetime indicator-messages indicator-printers indicator-multiload
残念ながら、indicator-datetimeのためにevolution関連のパッケージが戻ってきたが仕方がない。 旧バージョンではクラシックメニューのインディケータを使っていなかったが、 ついでにインストール(2013年9月11日)。
$ sudo apt-get install classicmenu-indicator
12.04で使っていたindicator-weatherはなくなった?
ファイルがどのパッケージに収録されているのものか、 既インストール、未インストールにかかわらず検索してくれるプログラム。 これに慣れると、ないことが苦痛になる。
$ apt-file search lightdm.conf fglrx-pxpress: /etc/lightdm/lightdm.conf.d/90-fglrx.conf lightdm: /etc/init/lightdm.conf lightdm: /etc/lightdm/lightdm.conf.d/50-greeter-wrapper.conf lightdm: /etc/lightdm/lightdm.conf.d/50-xserver-command.conf lightdm: /usr/share/doc/lightdm/lightdm.conf.gz lightdm-kde-greeter: /etc/dbus-1/system.d/org.kde.kcontrol.kcmlightdm.conf livecd-rootfs: /usr/share/livecd-rootfs/live-build/ubuntu-touch/includes.chroot/etc/lightdm/lightdm.conf.d/90-phablet.conf mythbuntu-lightdm-theme: /usr/share/mythbuntu/lightdm/lightdm.conf nvidia-prime: /etc/lightdm/lightdm.conf.d/90-nvidia.conf ubuntu-gnome-default-settings: /etc/lightdm/lightdm.conf.d/20-gnome.conf ubuntu-settings: /etc/lightdm/lightdm.conf.d/10-ubuntu.conf ubuntustudio-lightdm-theme: /usr/share/ubuntustudio/lightdm/lightdm.conf unity-greeter: /etc/lightdm/lightdm.conf.d/50-unity-greeter.conf unity-system-compositor: /etc/lightdm/lightdm.conf.d/10-unity-system-compositor.conf
Saucyでgnome-u2psがない。 事務から証拠書類として、メールの印刷を提出することが求められることから、 今まで通りにSylpheedからメールを印刷できず、顔面蒼白になった。
しかし、Sylpheedの全体の設定→詳細→外部コマンドで「印刷に外部プログラムを使用する」のチェックを外すと、 メールの印刷ができた。いつのバージョンから内部プログラムが動作するようになったのか不明だけど、 これで解決。
indicator-weatherは代替アプリがあるのだろう。
langdrill, bibus bibutils photon , eikazo , source-highlight , deborphanとdebfoster , wine, xcompmgr , convmv tnef , gimp-gmic , linux-source evtest , p7zip-full , g++-multilib ,
$ sudo apt-get remove --purge evolution-data-server evolution-data-server-common evolution-data-server-uoa libebackend-1.2-6 libebook-1.2-14 libebook-contacts-1.2-0 libecal-1.2-15 libedata-book-1.2-17 libedata-cal-1.2-20 libedataserver-1.2-17
$ sudo apt-get remove --purge deja-dup-backend-ubuntuone python-ubuntuone-client python-ubuntuone-control-panel python-ubuntuone-storageprotocol rhythmbox-ubuntuone ubuntuone-client ubuntuone-client-data ubuntuone-control-panel ubuntuone-control-panel-qt
このワークステーションにはBluetoothもない。
$ sudo apt-get remove --purge gir1.2-gnomebluetooth-1.0 gnome-bluetooth indicator-bluetooth pulseaudio-module-bluetooth
この他にもlibbluetooth3:amd64 libgnome-bluetooth11が関与するが、 sylpheedが依存するので削除できず。 gnome-user-shareも一緒に消されたけど、UbuntuPreciseでは大丈夫だったので、 大丈夫だろう。
Sylpheedを使っているのでThunderbirdはいらない。
$ sudo apt-get remove --purge thunderbird
ランチャーに不要なアクセサリを追加するUbuntu Web Appsを削除。 ランチャーのアイコンを右クリックしてUnlock from Launcherを選択すれば、 ランチャーから取り除くことができるが、パッケージごと削除する。
$ sudo apt-get remove --purge unity-webapps-common xul-ext-websites-integration
モニターがある程度のサイズだとグローバルメニューは使いにくい。 すべてショートカットキーで処理すれば問題ないかもしれないが。 globalmenuと名前がついたパッケージが、thunderbird-globalmenuしかなかった。 appmenuと名前がついたパッケージを削除。
$ sudo apt-get remove --purge appmenu-qt appmenu-qt5 indicator-appmenu
ゲーム関連のパッケージがどれほどのディスク容量を占めているか知らないが、 不要なものはHDDから削除。
$ sudo apt-get remove --purge aisleriot gnome-mahjongg gnome-mines gnome-sudoku gnomine
ATOK X3はIIIMFを使うので、iBus (Intelligent Input Bus)は不要。 libibusを削除しようとすると、compizやunityを巻き込むので断念。 ライブラリ以外のiBus関連パッケージを削除。
$ sudo apt-get remove --purge ibus ibus-gtk ibus-gtk3 python-ibus
誰かiBus-ATOKを作ってくれないかなぁ。
その他、気がついたことといえば、 globalmenuと名前がついたパッケージが、thunderbird-globalmenuしかなかったこと。
$ lsusb | grep Kensington Bus 003 Device 003: ID 047d:2048 Kensington Orbit Trackball with Scroll Ring
13.10でも、相変わらず両ボタン同時押しのエミュレーションが無効になっている。 大変使いにくい。これではデスクトップLinuxの使いやすさが半減する。 設定を変更する。
$ gsettings set org.gnome.settings-daemon.peripherals.mouse middle-button-enabled true
以下、ただの雑文につき、読む価値なし(いや、そもそも、こんなWebページを読む人は存在するのか?)。
Saucyでは、gnome-u2psがなくなっていた。これは、深刻な問題。 事務手続きのためにメールの印刷を求められることがちょくちょくあるが、 Sylpheedから印刷するときにu2psを長年使ってきた。 EUC-JPの時代では日本語化されたa2psを使っていたが、 UTF-8環境に移ってからは、 UTF-8に対応したu2psに依存していた。 代替手段を考えねばならない。
a2psとenscriptにはencodingのオプションがあるが、UTF-8は非対応。 e2psはそもそもencodingを指定できない。
Launchpadには2007年の時点でa2psのUTF-8化の要望が出ているが、 スクラッチから書いた方が早い。無理。との回答。
a2psはすでにEUC-JP対応が取り込まれているみたいだ。 nkfのライブラリを利用して内部的にEUC-JPに変換することで、 UTF-8のファイルを扱うa2ps 1.44のパッチを書いた人もいた。
a2psは、EUC-JPには対応しているみたいなので、次のようにすると、 一応はPostScriptができるようだ。
$ nkf -e test.txt | LANG=C a2ps --encoding=euc-jp -R --columns=1 -o test.ps && open test.ps
ちなみに、a2psにLANG=Cとしてやらないと、日付時間のところが文字化けする。
papsというフィルタを発見。a2psやu2psのように、装飾のあるPostScriptにはしてくれないが、 最低限の変換をしてくれた。これは最後の砦になる。
$ paps test.txt > test.ps && open test.ps
$ paps --font="Touka Maru Gothic\-L 14" test.txt > test.ps && open test.ps
nkfを使った方法を試してみた。↓これは正常に装飾印刷できた
$ nkf -e 27511 | LANG=ja_JP.eucJP a2ps -=mail -1 -o tmp.ps --encoding=euc-jp
何故か↓これはevienceで表示に失敗する。gvだと正しく表示できる。
$ nkf -e 27511 | LANG=ja_JP.eucJP a2ps -=mail -r -2 -o tmp.ps --encoding=euc-jp -P display
この「-P display」はおもしろいオプションだ。 「-P」はプリンタ名を書くのが通常なのだが、 「display」と指定すると、ビューアを起動してPostScriptファイルを表示してくれる。 こういう書き方もおもしろい。
インターネット上のあちこちにATOK X3を64 bit環境にインストールときに必要になる i386パッケージのリストがある。おそらく、情報元はちゃんと調べた人で、 それがコピーされて出回っていると思う。
しかし、64bit版のim-iiim.soを提供してくれる人が出現したことにより、 状況は少し変化している。64bit版im-iiim.soの登場によって、 不要になったi386パッケージがあるのかないのか、検討したい。
$ locate im-iiim.so /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules/im-iiim.so /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-iiim.so /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-iiim.so $ diff /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules/im-iiim.so /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-iiim.so バイナリーファイル /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules/im-iiim.so と/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-iiim.so は異なります
いきなり、挫折した。32bit版のim-iiim.soが残っている。 これはもちろん、がっちりi386パッケージに依存している。
$ ldd /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules/im-iiim.so linux-gate.so.1 => (0xf779c000) libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xf7764000) libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xf774a000) libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf7612000) libgtk-x11-2.0.so.0 => /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 (0xf71a3000) libgdk-x11-2.0.so.0 => /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0 (0xf70f5000) libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xf70d4000) libgdk_pixbuf-2.0.so.0 => /usr/lib/i386-linux-gnu/libgdk_pixbuf-2.0.so.0 (0xf70b1000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf706d000) libpangoxft-1.0.so.0 => /usr/lib/i386-linux-gnu/libpangoxft-1.0.so.0 (0xf7064000) libpangox-1.0.so.0 => /usr/lib/i386-linux-gnu/libpangox-1.0.so.0 (0xf7045000) libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xf6ff8000) libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xf6fa4000) libgmodule-2.0.so.0 => /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0 (0xf6f9e000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf6f99000) libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xf6e94000) libiiimcf.so.3 => /usr/lib/i386-linux-gnu/libiiimcf.so.3 (0xf6e74000) libiiimp.so.1 => /usr/lib/i386-linux-gnu/libiiimp.so.1 (0xf6e42000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf6c8e000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf6c88000) libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf6c67000) libpangocairo-1.0.so.0 => /usr/lib/i386-linux-gnu/libpangocairo-1.0.so.0 (0xf6c5a000) libXfixes.so.3 => /usr/lib/i386-linux-gnu/libXfixes.so.3 (0xf6c54000) libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xf6b32000) libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xf69b9000) libpangoft2-1.0.so.0 => /usr/lib/i386-linux-gnu/libpangoft2-1.0.so.0 (0xf69a4000) libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xf696a000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf694f000) libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xf6943000) libXinerama.so.1 => /usr/lib/i386-linux-gnu/libXinerama.so.1 (0xf693f000) libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xf692e000) libXrandr.so.2 => /usr/lib/i386-linux-gnu/libXrandr.so.2 (0xf6923000) libXcursor.so.1 => /usr/lib/i386-linux-gnu/libXcursor.so.1 (0xf6918000) libXcomposite.so.1 => /usr/lib/i386-linux-gnu/libXcomposite.so.1 (0xf6913000) libXdamage.so.1 => /usr/lib/i386-linux-gnu/libXdamage.so.1 (0xf690f000) libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf68fc000) /lib/ld-linux.so.2 (0xf779d000) libXft.so.2 => /usr/lib/i386-linux-gnu/libXft.so.2 (0xf68e6000) libthai.so.0 => /usr/lib/i386-linux-gnu/libthai.so.0 (0xf68dc000) libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xf68d4000) libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xf6893000) libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf688f000) libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf6888000) libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xf67e9000) libpixman-1.so.0 => /usr/lib/i386-linux-gnu/libpixman-1.so.0 (0xf673e000) libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xf6716000) libxcb-shm.so.0 => /usr/lib/i386-linux-gnu/libxcb-shm.so.0 (0xf6712000) libxcb-render.so.0 => /usr/lib/i386-linux-gnu/libxcb-render.so.0 (0xf6708000) libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf66ee000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf66e4000) libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xf66c2000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf66ab000) libharfbuzz.so.0 => /usr/lib/i386-linux-gnu/libharfbuzz.so.0 (0xf6658000) libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xf662f000) libdatrie.so.1 => /usr/lib/i386-linux-gnu/libdatrie.so.1 (0xf6626000) libgraphite2.so.3 => /usr/lib/i386-linux-gnu/libgraphite2.so.3 (0xf660b000)
32bit版のim-iiim.soを取り除いた場合の影響を見積もれないので、 このまま放置する。従って、64bit版im-iiim.soの登場で不要になった i386パッケージは検証できない。
昨日(2013年9月20日)の午後に、LibreOffice Calcで作表していると、 急にハングアップした。Calcが突然固まった後、マウスがだんだん重くなって、 最終的には全く動かなくなった(今から考えれば、何かのプログラムが暴走してメモリを使い切った?)。 仕方がないので、sshログインして再起動をしようと考えるが、 pingすら届かない。仮想コンソールに切り替えようとしたが、 全くキーを受け付けない。完全にハングアップしている。
このワークステーションの再起動ボタンを押すなんて、 初めてに近いが、仕方がないので、再起動ボタンで再起動させる。
電源が入り、BIOSの起動画面が表示され、Ubuntuの文字が一瞬見えたところで、 画面が真っ暗になる。もうpingも届かない、ハングアップしている。
真っ暗な画面の裏でfsckでも延々とやっているのかもしれない、 と経験的に推測し、放置すること3時間。 どうやらやっぱりハングアップしている。
これでは、内蔵HDDにインストールされたシステムで何とかできる段階は終わっている。 どうしようもない。仕方がないので、インストールメディアのDVDから起動し、 Try Ubuntuの方を選択。無事に起動しUbuntuを使える。 DHCP環境ではないので、固定IPアドレスの設定は毎回必要だけど、 普通に使える。
$ sudo fsck /dev/sda
マウントしていない状態で、fsck
を実行。
一瞬で検査が終わり、エラーはない。
これほど深刻な不具合なら、すぐに原因のdebパッケージがアップデートされているだろう、 と踏んで、chrootでHDDのシステムに切り替えて apt-get upgradeする方針で考える。 幸いにも、chrootコマンドがDVDのお試しUbuntuに入っていた。
$ sudo mkdir /1 $ sudo mount /dev/sda1 /1 $ sudo mount --bind /dev /1/dev $ sudo mount --bind /proc /1/proc $ sudo chroot /1
これで、ルートをDVDのシステムから内蔵HDDのシステムの方に切り替えられた。
すぐにapt-getでアップデートしようとするが、失敗する。
名前解決に失敗してるようだ。DNSサーバの情報が、chroot後のシステムに伝わっていないらしい。
仕方がないので、/etc/resolve.conf
にDNSサーバの情報を書き込む。
こういうときは、Emacsじゃななくてviを使った方が安心。
無事に名前解決できるようになったので、改めてパッケージのアップデートを行う。
# apt-get update && apt-get upgrade && apt-get dist-upgrade
フォントのパッケージが1つ落ちてきただけだった。 こちらのアプローチでは解決しないと判断。
UbuntuのインストールDVDは優秀だ。DVDからの起動中にESCを押下すると、 メニューが現れ、Memtest86+を実行できる。 これには時間がかかると覚悟したが、案の定、終電に間に合わなさそう。 そのままモニターの電源を落として帰宅。翌朝に出勤してみると、 Memtest86+は6周目だった。 調べてみると、メモリの物理的検査自体は1周で十分とのことだったので、これで検査終了。 ESCを押下すると、再起動が始まる。
これまで試したことがなかったが、 Ubuntuは起動時にShiftを押下し続けると、 grubのメニューが出てくるらしい。 grubのメニューが出るときと出ないときの違いをよく理解していなかったが、 複数のOSが入っている状態だとgrubのメニューが表示され、 Ubuntuが1つだけ入った状態だけどgrubのメニューが表示されないという仕組みだった。 このマシンは、Ubuntu Saucyβしかインストールしていない。従って、 grubのメニューは表示されない。
実際にShiftキーを押下し続けてみたが、真っ暗な画面(ハングアップした状態)になるだけで、
メニューが出てこない。もしかすると、MBRや/boot
が壊れたのではと、
当たりをつける。これが原因なら、grub2の再インストールで解決するかもしれない。
DVDから起動して、grub-install
を実行してみる。
$ sudo grub-install --boot-directory=/boot /dev/sda
Path `/boot/grub' is not readable by GRUB on boot. Installation is impossible. Aborting.
不可能ですと言われた。仕方がないので、またchrootして、その中でやってみる。
/# grub-install --boot-directory=/boot /dev/sda Installation finished. No error reported.
無事に成功したようだ。 マシンを再起動してみるが、現象は変わらず。 grub絡みの原因じゃなかったのか。
もうどうしようか。考えた。考えたけど、妙案やひらめきは生まれず、 ホームディレクトリをバックアップして、クリーンインストールをする方向に切り替える。 これは敗北だ。
ホームディレクトリの最新のバックアップは2,3日前なので、 システムが壊れる直前に作業をしていたファイル群を救出する必要がある。
DVDから起動して、容量の大きなUSBフラッシュメモリをext4でフォーマットする。
USBフラッシュメモリをマシンに挿すとそのまま自動的にマウントしてしまうので、
扱いがやっかいだ。もちろん、マウントしたままでフォーマットはできない。
しかも、GUIのコンテキストメニューで「取り出し」を選んでしまうと、
アクセス不能になり、フォーマットもできない(/dev/sdbが消える)。
試行錯誤した結果、CLIで普通にumount
すればアクセス可能な状態でアンマウントだけできることが分かった。
$ sudo umount /dev/sdb1 $ sudo mkfs -t ext4 /dev/sdb1
EXT4のストレージを用意できたら、ここに数日以内に変更・作成したファイルをコピーする。
rsync
は、タイムスタンプによるファイルの選択機能がないので、
find
と組み合わせることにする。
$ sudo find /1/home/xxxx -mtime -1 -exec rsync -lptgovHR "{}" /media/ubuntu/5f... \;
最初、うっかりaオプションをつけて実行したが、aオプションはrlptgoDオプションと同等であり、 rオプションが含まれている。そのため、ごっそり全部をコピーしようとし始めた。 数年前の古いファイルまでコピーし始めたので、Cntrl-cで強制終了させ、 aオプションの代わりに、lptgoにする。Rオプションは超絶便利なオプションであり、 単体ファイルのコピーなのに、ディレクトリ構造をそのまま保持してくれる。 ハードリンクを保持するHオプションは必須である。 ハードリンクだらけなのに、実体の重複コピーが繰り返されると、 バックアップするファイルの容量が倍増する可能性がある。 DVD-Rなど、ハードリンクに対応しないファイルシステムにバックアップすると、 本来のファイル容量から大幅に増加し、たまに容量オーバーで書き込めないのはこのためだ。 mtimeオプションに-1を与えて成功するかどうかを確認し、成功したので、数字を増やしたり、 ctimeに変更して、さらにバックアップを行う。 うっかりatimeにすると該当ファイルが万単位になって、 USBフラッシュメモリが容量オーバーになるため、これは気をつけたい。
$ sudo find /1/home/xxxx -ctime -4 -exec rsync -ulptgovHR "{}" /media/ubuntu/5f... \;
2回目以降は、新規バックアップではなく更新になるので、
rsync
にuオプションが必要。
バックアップが完了したら、再起動してDVDからクリーンにストールした。 通常通りにインストールを行った後に、このメモ(このWebページ)を参照しながら、 コピペを繰り返して、諸設定やATOKを入れる。 このメモの存在意義が光り輝いた瞬間である。自分の備忘録に救われた。
バックアップはrsync
で、メインのバックアップから$HOMEに書き戻した。
さらに、USBフラッシュメモリのバックアップから上書きで$HOMEに書き戻した。
$ rsync -aHv /media/xxxx/xxxx/backup/ /home/xxxx $ rsync -aHv /media/xxxx/5f..../1/home/xxxx/ /home/xxxx
コピー元の終端にある「/」は重要である。
これがないと、/home/xxxx/backup
というディレクトリができてしまう。
数日の間に消去したファイルで、メインバックアップに残っていたものは、 そのまま復活してしまったと思うが、どのファイルか調べるのが面倒なので放置。 メールのファイルだけど、おかしなことになっているかもしれない。
何とか復旧に成功し、この記録を綴る。 再度、同様の障害に遭遇し、復旧するときにはこの記録を参照しよう。