Vine Linux 4.0〜

                                         by tearoller


目次

emacsでリモートファイルを編集:TRAMP

Vine4.0のUTF-8化   3.2でもOK

wmv動画からrm動画への 変換と結合


emacsでリモートファイルを編集:TRAMP


2009.5.2
なーんて久しぶりなんだろ

  emacsでリモートファイル (要するに別のマシンにあるファイルです) を編集するには、昔からAnge-FTPが定番でした。これは、かなり前からemacsに含まれていた機能で、たとえばファイルをオープンするときに、
        /tearoller@kerokero.net.jp:~/test.txt
のように指定することで、ftpを用いて "kerokero.net.jp" にあるファイル "text.txt"を編集できるというものです。もちろん、ディレクトリを指定すれば、diredでファイル一覧を表示することもできます。要するに、「リモートマシンからファイルをftpでgetして編集し、セーブしたファイルをリモートマシンにftpでputして戻す」という手順を自動でやってくれるというような機能です。これはとっても便利なもので、昔は良く使いました。まあ、最近はsshでログインして、そちらでemacsを立ち上げて編集という方が多いので、あまり使わなくはなったのですが。
  ところが最近、ある理由からリモートファイルを編集する必要が生じました。
              ---これについてはまた後日紹介しましょう
そこで思い付くのがこのAnge-FTPなのですが、そもそもftpというのは古き良き時代の産物で(何しろパスワード平文で流してますから)、今ではscpなどより安全なファイル転送方法が主流なのは言うまでもありません。というわけで、ftpではなくてscpを使うようなものは無いのかなあと、昔から思っておりました。
  ということで、今回、色々調べたところ、TRAMPというemacsのパッケージが、まさにそのためのものでした。これは非常に面白く、かつ、強力な機能があります。まず、プロトコルとして、rcp、scp、rsyncといったリモートコピーのプロトコルから、rsh、ssh、telnetといったリモートアクセスのプロトコルまで使用可能です。たとえば、scpを使うのならば、ファイルをオープンするときに、
     /scp:tearoller@erokero.net.jp:~/test.txt
のように指定すればOKです。sshを使うならば、
     /ssh:tearoller@erokero.net.jp:~/test.txt
というふうにできるのです。"scpならともかく、何でsshやrshのようなリモートアクセスでそんなことができるの?"と思いますが、まあ要するに、相手にログインして普通のテキストならcatし、その出力を保存すれば、ファイルを転送していることになるわけです。実際は、リモートホスト側で mimencode や uuencode なんかで符号化しているそうです。このあたりは、
    http://www.gnu.org/software/tramp/tramp_ja.html
に詳しく書いてあります。とっても面白いですよ。
  さて、このTRAMPの導入ですが、上記のドキュメントによれば、Emacs21.4かそれ以降のものはTRAMPを含んでいるとなっています。ところが、私が使っているvine linux 4.2 の Emacsは、emacs-21.4-11vl4なのですが、これにはTRAMPが入っていません。使えるように設定されていないということではなくて、そもそもパッケージがインストールされていないようです。
  というわけで、vineでTRAMPの機能を利用するならば、emacs22をインストールするのが一番手っ取り早いのではないかと思います。私の環境の場合、
        apt-get install emacs22
で何も設定すること無くTRAMPを使えるようになりました。
  ただし、あるリモートマシンの場合 (組込み系のやや特殊なマシンですが) 、漢字を含むファイル(UTF-8です)をssh  で開くと文字化けが生じました。ところが、 scp を使って開くとOKです。これは多分、リモートマシン側のuuencodeに問題があるのではないかと思います。ただし、scp の場合、ファイルのオープンのときはもちろんですが、セーブするときにもパスワードをきいてくるようです。
  今時は、リモートファイル編集なんて、あまり必要性は無いかも知れません。しかし、たとえば相手が非常に非力な組込みマシンなどの場合(ログインはできても、エディタなんて入ってないし、漢字さえ表示できないなんて場合です) 、結構重宝する機能じゃないかなと思います。



Vine4.0のUTF-8化

2006.12.1

ようやくVine Linux4.0がリリースされた。Vine4.0でも標準的な日本語環境は引き続きEUCである。そんなわけで、今だにUTF-8でないのは時代遅れという理由でVineを中傷し、ただ巨大でいろんな選択肢が多いというだけの海外ブランドディストリビューションに走らせようとする勢力もあるようだ。まさに片腹痛い話である。
ただし、世間はたしかにUTF-8に向いている。XMLしかり、perlしかりであり、UTF-8の世界で仕事をすることにはそれなりの必要性も生じている。実は、Vine4.0をUTF-8環境にするのはそんなに難しくないし、3.2でもそう難しいことではなかったのだ。
ここで、Vine4.0をUTF-8環境にするためのTIPSをまとめてみた。3.2についても若干触れている。

1. おすすめしないが、システム全体をUTF-8にする

/etc/sysconfig/i18n の内容を
  LANG="ja_JP.UTF-8"
に書き換える。これで、システム全体がUTF-8になる。ただし、システム起動時のメッセージなどの表示も文字化けするようになってしまう。これは、/etc/rc.d/rc.sysinitなどを見るとわかるが、カーネルのUNICONモジュールにUTF-8のものが無いためであろう。別に起動時のメッセージが文字化けしてもどうということは無いが、気になるのであればシステム全体をUTF-8にするのはやめたほうがよい。

2. 自分の環境だけをUTF-8にする。

というわけで、自分の環境だけをUTF-8にするのであれば、~/.bash_profileに
   LANG="ja_JP.UTF-8"
export LANG
を加えればよい。X環境も特に問題ないはずだ。gnome端末もUTF-8表示になっていると思う。ただし、アプリケーションごとに注意すべきことがあるので、気を付けよう。特にthunderbirdなどは、まだ起動しないほうがよい。(理由は下記参照)

3. 日本語のファイル名の変換

ずっとEUC環境であったのであれば、ファイルシステム中の日本語(マルチバイト)のファイル名もEUCのままになっているであろう。これを変換せずにLANGをja_JP.UTF-8にすると、EUCのファイル名とUTF-8のファイル名が混在してしまい、やや厄介なことになる。
日本語ファイル名がありがちなのは、SambaでWindowsと共有しているディレクトリ、Thunderbirdの日本語メールフォルダに対応する*.msfファイルなど(これは~/.thunderbird/*/Mail*/などにある)であろう。
特にThunderbirdの場合、*.msfファイル名がEUCのままLANG=ja_JP.UTF-8の状態で起動すると、文字化けしたメールフォルダと、ファイル名が文字化けした*.msfファイルが沢山できてしまうという現象を経験したので注意。
Sambaも通常はEUCファイル名の設定となっているので、できればファイル名の変換処理とsmb.confの設定変更が終わるまで停止しておいた方がよい。タイミングが悪いと、この場合も文字コードが異なるファイル名のものが混在してしまう可能性がある。
ファイル名のコード変換には、convmvというプログラム(perlスクリプトらしい)を使う。これは、vine-plusなどにも無いようなので、http://j3e.de/linux/convmv/ からダウンロードしてインストールする。変換したいディレクトリに移動し、
   # convmv -r -f euc-jp -t utf8 * --notest
とすると、そのディレクトリ以下のファイル名を再帰的に変換する。危険な操作ではあるので、最初は--notestオプションを付けずに確認した方がよい。このツールは、すでにUTF-8に変換されたファイル名は、さらに変換して変にしないように考慮されているすぐれものである。つまり、EUCとUTF-8のファイル名が混在しても大丈夫ということであるが、不安があれば--notestをはずして確認した方が良い。

4. sambaの設定変更

sambaで共有しているファイルのファイル名は、通常/etc/samba/smb.confで次のように
指定されているため、eucJPである。
  unix charset = eucJP-ms
display charset = eucJP-ms

UTF-8の環境では、これを次のように変更する。
  unix charset = UTF-8
display charset = UTF-8
Vine4.0でインストールされるsambaのsmb.confでは、該当部分のコメントを入れ換えればよい。

5. emacsのUTF-8化

Vine3.2では、emacsでUTF-8を扱うためには、Mule-UCSというパッケージが必要である。これは、
   # apt-get install Mule-UCS
でインストールできる。その後、.emacs.el の最初の方を下記のように変更する。
   --------------------------------------------

;;; 漢字コードの設定

;;(set-default-coding-systems 'euc-jp)
;;(set-buffer-file-coding-system 'euc-jp-unix)
;;(set-terminal-coding-system 'euc-jp)
;;(set-keyboard-coding-system 'euc-jp)
(require 'un-define)
(set-default-coding-systems 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)

--------------------------------------------
Vine4.0の場合は、少なことも/etc/skelからユーザーディレクトリにコピーされるemacs.elでは、LANG環境変数により上記の設定が自動でされるようになっているので、変更は不要である。

6. ページャ(less)をlvに変更する

lessはUTF-8に対応していないようなので、UTF-8対応のページャであるlvに変更してしまおう。(lessのUTF-8対応も可能かもしれないが)。
   #apt-get install lv
使用方法はlessをそれほど変わらない。
ちなみに、lvはファイルのコード変換にも使える。例えば、
   #lv -Iu8 -Oej foo.xml > bar.xml
とすると、UTF-8のファイルfoo.wmlをEUCのファイルbar.xmlに変換する。
指定できる文字コードはjman lvを参照。入力コーディングシステムの指定である -I は省略できるようである(その場合、自動選択である-Ia となるように思われるが...?)。

7. man、jmanの表示ができるようにする

man、jmanでは、ページャの指定がlessになっているため、UTF-8環境では文字化けが生ずる。そこで、.bash_profileでPAGER、MANPAGERの設定をlvにしてしまうのが手っ取り早い対策だ。

  MANPAGER="/usr/bin/lv -i -Ia -Ou8"
export MANPAGER

8. その他のアプリケーションで不具合があったら...

Vineの責任では無かろうが、UNICODEに対応していないアプリケーションもある。たとえば、筆者の場合スケジュール管理にgnomecalというソフトを利用しているが、これはUTF-8では表示、入力もできなかった。そこで、下記のようなスクリプト(gnomecal_wrap.sh)を作成して対処した。
   --------------------------
#!/bin/sh

LANG=ja_JP.eucJP
export LANG

/home/yyama/bin/gnomecal
--------------------------
かなり苦しい対策だが、特に問題なく利用できる。他のアプリケーションでも可能な方法と思う。

9. 最後に

以上のように、VinelinuxでのUTF-8環境への移行はそれほど難しいことではない。サーバー環境などで、システム全体をUTF-8にするならば、さらに設定変更は必要であろうが(例えばhttpd.confなど)、サーバー管理をしているような人であればそれほど難しくないと思う。
Vine4.0では、ディストリビューション全体のUTF-8への変更もできないことではなかったであろうが、あえて見送ったというのも一つの思いやりではなかろうか。例えば、アップグレードの場合に突然EUCからUTF-8にされたのではかなりショックが大きいと思うので。