UbuntuSaucy

更新日時: 2014(平成26)年 2月15日(土) 午後01時54分54秒

開発コード名 Saucy Salamander

Assorted Tips
Shotwellのバックアップ
CLIでログアウト
欲しいファイル名でリポジトリを検索
pdf2ppt.sh
Emacs
IIIMECF
Emacs関連のトラブルシューティング
R
R関連のトラブル
追加パッケージ
LaTeX
LaTeX関連のトラブル
Firefox
Firefox関連のトラブル
gnome-open
LibreOffice
トラブル
プリンタ
Brother MFC-8870DW
EPSON LP-S820
EPSON LP-S7500
その他のトラブル
システムの再起動が必要です(2013年10月10日)
iPhoneに接続すると「このコンピュータを信頼しますか?」がエンドレスになる
インストール
諸設定
Emacs
ATOK X3
Sylpheed
EbView
gnome-terminal
gnome-open
indicatorの追加
apt-file
その他の追加インストールしたパッケージ
不要なアプリの削除
ハードウェア
トラックボール
現在の状況 2014年 2月15日
余談
日本語UTF-8テキストファイルをPostScriptファイルに変換
本当にATOK X3に必要とされるi386パッケージは?
かつてないほど深刻なトラブルからの復帰

Assorted Tips

Shotwellのバックアップ

Ubuntu 12.04 LTSのときは、 ~/Pictures~/.shotwellをDVD-Rにバックアップするシェルスクリプトを使っていたが、 ~/.shotwellは、 Shotwell 0.13.0以降に~/.local/share/shotwellに変更された模様。

CLIでログアウト

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というパッケージに収録されているらしい。

pdf2ppt.sh

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を編集した方がよいかも。

Emacs

IIIMECF

XIM経由でATOK X3から日本語入力できているが、 SaucyでもIIIMECFも使いたい。未実行(2013年9月11日)。

Emacs関連のトラブルシューティング

muse-elのsrcがexampleで出力される

つっかり、emacs-goodies-elをインストールするのを忘れていたことが原因。 emacs-goodies-elに含まれるhtmlize.elが存在しないと、 HTML出力したときの整形済みテキストのクラスがsrcではなくexampleになる。

$ sudo apt-get install emacs-goodies-el

R

CRANUbuntuSaucyをサポートするのは、正式リリース以後のことだろう。 しばらくは、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関連のトラブル

今のところなし

追加パッケージ

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

rgdalパッケージ

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")

LaTeX

texliveを入れる。yatexを入れると、日本語関連がごっそり入った。 xdvik-jaを追加インストール(2013年9月10日)

$HOME/texmf$HOME/.texmf-varをバックアップから復元。

12.04のeuc-jpな日本語TeX環境から、 UTF-8な日本語TeX環境へ移行できたことを確認した。

LaTeX関連のトラブル

xdvi (xdvik-ja)で日本語表示できない

しかし、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

PDFビューア(evince)で日本語の約物の表示位置がおかしい

修正前 修正後
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"

成功した。

Firefox

Firefox関連のトラブル

  1. しばらく使っていると、右クリックができない(コンテキストメニューが一瞬フラッシュして何も表示されない)不具合は、Precise (12.04.3 LTS) でも悩まされたが、この不具合は健在。 他の人は報告していないので、こちらの環境に固有の現象かもしれない。Webブラウザを他のものに変更することを検討(2013年9月12日)。 1. Firefoxに内蔵されているはずのPDF Viewerが機能していないようだ(2013年9月12日)。 ブラウザ内PDF閲覧機能は期待通りに動作している(2013年10月7日)。

gnome-open

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においているものでもよいらしい(未検証)。

LibreOffice

トラブル

Drawのエキスポートでepsに出力できない。 「画像フィルターが見つかりません」とエラーになる(2013年9月13日)。 これは[[https://bugs.freedesktop.org/show_bug.cgi?id=67602][既知のバグ]]らしい。バグ報告は4.1.0.4 releaseだけど、 SaucyのLibreOffice 4.1.1.2でも改善されていない。 これはちょっと厳しい。 ドロー図のepsファイルは、ほとんどDrawに頼っていた。 精緻な図の時は、Tikzで書くときもあるけど、 クリップアートも含んだ図にするときは、Drawが便利。 困った。 4.1.2~rc3-0uで修正されていた。

プリンタ

Linuxマシンは10年たっても、 プリンタが鬼門。

Brother MFC-8870DW

このプリンタは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)」 に設定するらしい(未確認)。

EPSON LP-S820

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

作業記録(2013年9月11日)

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ユーザからクレームが殺到したのかもと想像してみる。

2013年10月7日追記

ドキュメントビューア(Evince 3.10.0)からPDFの印刷をするケースが多いが、 印刷ジョブを送信するとLP-S820がハングアップする(pingが通らなくなる)PDFとそうでなく正常に印刷できるPDFがあり、 その差がよく分からない。 ハングアップしてしまうと電源ON/OFFで再起動させるしか対処方法がない。

EPSONのレーザプリンタには長年お世話になっており、 中傷するつもりは全くないが、 LinuxユーザにはEPSONと特に鬼門であると言わざるを得ない。

プリンタはHewlett-Packardの一択だという意見を散見するが、 Hewlett-Packardのプリンタを使った経験はない。

EPSON LP-S7500

プリンタのIPアドレスでProbeすると、 接続形態の候補がいくつも出てきた。 「LPD/LPR queue 'PASSTHRU'」を選んでみる。 Searching for dirversをウインドウが出て、延々と検索している。 EPSON LP-S7500 Foomatic/eplaser-jp [en] (recommended)を探し当てた。

その他のトラブル

システムの再起動が必要です(2013年10月10日)

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

iPhoneに接続すると「このコンピュータを信頼しますか?」がエンドレスになる

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にチェックを入れる。

キーバインドをEmacs風に

$ 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

Emacs

もっとも大事なソフトウェアの1つであるEmacs。 これがないと何もできない無力感に悩まされるし、 Emacsがあると何でもできる気になってくる。

バックアップから$HOME/.emacs.d、 及び$HOME/.hunspell_defaultを戻す。 emacsおよび、Emacsで使用するように設定されているもの(ess, muse-el, fonts-inconsolata)のインストール。$HOME/.recentfは戻さず。

ATOK X3

リリースからかなりの年数を経たATOK X3は、 時代から取り残される様相を呈していたが、 GTK+3.0に対応したiiimgcfを公開してくれる人が出現した(ATOK 3X for GTK+ 3.0.)。

ソースやビルドの手順はこちら→iiimgcf for GTK+3.0

これにより、Saucyでも(正確にはGTK+3.0アプリでも)問題なくATOK X3は使える。 大変ありがたい。

i386パッケージのインストール

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ファイルを放り込むとよいと思う(未検証)。

トラブルなど

Sylpheed

バックアップから$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ファイルを書き換えなければいけないだろうが、 忘れないようにしなければ。

EbView

バックアップから辞書群と$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

gnome-terminal

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

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の追加

リポジトリにある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

ファイルがどのパッケージに収録されているのものか、 既インストール、未インストールにかかわらず検索してくれるプログラム。 これに慣れると、ないことが苦痛になる。

$ 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で見つからないパッケージ

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 ,

不要なアプリの削除

evolution関係

$  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

Ubuntuone関係

$ 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関連

このワークステーションには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では大丈夫だったので、 大丈夫だろう。

Thunderbird関連

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

iBus関連

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

現在の状況 2014年 2月15日


余談

以下、ただの雑文につき、読む価値なし(いや、そもそも、こんなWebページを読む人は存在するのか?)。

日本語UTF-8テキストファイルをPostScriptファイルに変換

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に必要とされるi386パッケージは?

インターネット上のあちこちに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を実行。 一瞬で検査が終わり、エラーはない。

chrootしてみる

これほど深刻な不具合なら、すぐに原因の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を押下すると、再起動が始まる。

grub2の再インストール

これまで試したことがなかったが、 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というディレクトリができてしまう。

数日の間に消去したファイルで、メインバックアップに残っていたものは、 そのまま復活してしまったと思うが、どのファイルか調べるのが面倒なので放置。 メールのファイルだけど、おかしなことになっているかもしれない。

何とか復旧に成功し、この記録を綴る。 再度、同様の障害に遭遇し、復旧するときにはこの記録を参照しよう。