Hatena::ブログ(Diary)

=== SANDmark 19106 === beginning stress test このページをアンテナに追加 RSSフィード

2014年02月02日

Ubuntu 13.10 で pLaTeX を使おうとしたらハマった

 複雑すぎだろ。
 お久しぶりです、さんどさんです。
 どうもTeX関係になると毎回苦労していまして、しかもその苦労たるや数時間単位、下手を打つと日にち単位で悩む羽目になるので、「苦労したけど環境構築できたからもういいや」で放っておくと、後からもう一度インストール・設定することになったときは実に非生産的で不毛です。
 Windowsに入れた時もcygwinとのパスの兼ね合いだとか、Emacsから呼び出すにはどうしたらいいだとか、とにかく苦労してます。TeXとかLaTeXとか、他にもYaTeXやらTeTeXやら、みんな違ってみんないいのは構わないけど、何がどう違うの? pLaTeXが日本語対応っていうのはさすがにわかるけど p って何?
 そもそもTeXは「てっくす」ではなく「てふ」という発音だと大昔に聞いて、LaTeXは「らてふ」が回り回って「やちょう」になってるらしいけど、字面的にどうしても自然に脳内変換できなくて、妥協した結果が「てく」な私はどうなの?
 TeXファミリーへの疑問は尽きません。*1

事の発端

 もともとはEmacsのorg-modeから日本語を含むpdfを作成したかったのでした。アルファベットのみのpdfは問題なく出力されるのですが、日本語の文字がまったく透明になっている。念のためWindows環境でも確認しましたが、日本語のフォント情報を参照できずに空白が出力されちゃってたみたいです。やっぱり素の状態から日本語pdf出力は無理。

TeX環境の用意

 ほとんどの場合TeX Liveという統合環境をインストールすればよろしいようです。私はいろんな記事を参考にしていろんなパッケージをインストールして試行錯誤した結果、なぜかdvipdfm(x)を実行するたびに

** WARNING ** Could not open config file "dvipdfmx.cfg".

 という警告を騙るFatal Errorが発生していましたが、そんなときは

$ sudo apt-get --purge autoremove tex\*

とかなんとかして、TeXに限らず最近インストールした怪しい関連パッケージを設定ファイルごと一旦削除したほうがいいと思います。とりわけ私のような「嗚呼TeX、あなたはどうしてそんなにブラックボックスなの?」と思っている人には特に効果的です。
 話を戻しましてTeX Liveのインストール。

$ sudo apt-get install texlive-full texlive-lang-cjk xdvik-ja
$ sudo vi /usr/share/texmf/web2c/texmf.conf
shell_escape_commands = \
bibtex,bibtex8,bibtexu,pbibtex,upbibtex,biber,\
kpsewhich,\
makeindex,mendex,texindy,\
mpost,pmpost,\
repstopdf,epspdf,extractbb,\

texlive-full をインストールしておかないとEmacsの org-mode から出力するときに必要なLaTeXクラスが無くて困るので、1時間ほどかかりますが悪しからずご了承くださいませ。

Emacsのorg-modeへの対処

 これでおおむね完了です。pdfファイルを開くコマンドは okular でもいいんですが、 texlive-full をインストールしていれば poppler-data というものも一緒にインストールされているはずなので、Ubuntu標準のドキュメントビューア evince で開くことができます。
 長々とお疲れ様でしたと言いたいところですが私の環境では相変わらず日本語は出力されませんでしたので、以下蛇足です。

org-mode: C-c C-e p で日本語pdfが作れないときの対処

 コンソールから

$ platexpdf something.ja.tex
$ evince something.ja.pdf

 と打ち込むと、こちらはきちんと日本語が出力されていました。感動するほど日本語でした。多分リアルに「ふつくしい……」とか言ってて気持ち悪かったと思います。
 とすると問題はEmacs側にあるはずなので、掘り下げていったら、上記参考サイトの elisp コードのうちこのライン

  (when (executable-find "platexpdf")
    (setq org-latex-to-pdf-process '("platexpdf %f" "platexpdf %f")))

 org-latex-to-pdf-process を評価してみたら見事に platexpdf が入っていなかったので、どうやら when の条件である (executable-find "platexpdf") nil を返しているようです。っていうか返してました。もちろん chmod +x としてあります。
 その原因は platexpdf $HOME/bin に放り込んでいたかららしく、Emacsが $HOME/bin を実行パスとして認識できていなかったみたいです。
 もうこの頃には体力的に限界だったので対処療法的に /usr/local/bin platexpdf を移し、 (executable-find "platexpdf") t を返すようになったのを確認して、 org-mode から C-c C-e d しまして、 evince で日本語が表示できていることを確認して寝たのが昨日です。
 Emacsが参照するパスをシェルと同じものにするには no title などなどいろいろあるようですが、このエントリを書いてる時点で作業に戻りたいのでこちらに関してはまた今度。「こんな例もあるよ」ということでひとつ。

*1:stibearさんからのご指摘で、YaTeX(やちょう)はEmacsにおけるLaTeXの入力支援モードだと教えていただきました。

2013年06月28日

VMware上のUbuntu13.04でvmware-toolsが動かなかったので

タイトル通り vmware-tools が動かなかったのです。というより、

  • カーネルが 3.8 になったので vmware-tools をビルドしようとしたら
  • linux-headers に version.h が無いと怒られ失敗し
  • ln -s でリンクを貼ってビルドし直したんだけど
  • カーネル 2.8 の方法でビルドしようとしやがるので当たり前のように失敗する

というどうしようもない状態に陥っていました。
ちなみに vmware-tools のバージョンは 9.5.0.19712 (build-958366) だったらしい。
多分バージョンによってはビルドできる。

が、いまどき VMware Player で Ubuntu を動かすライトユーザーとしては
いちいち VMware® さんに個人情報を送信して有料版体験版ダウンロードし、
そこから vmware-tools だけを失敬してアップデート
などという苦行を強いられるのはさすがにもう嫌なので、
思い切って open-vm-tools に乗り換えてみました。

ようするにオープンソース版の vmware-tools らしい。

$ sudo apt-get install open-vm-tools       # 設定ファイルを置き換えるかどうか訊かれる。とりあえず全部置き換えた
$ sudo /etc/init.d/vmware-tools stop       # バッティング予防に既存の vmware-tools を停止
$ sudo /etc/init.d/open-vm-tools restart   # open-vm-tools 再起動

ここまでで特にエラーは無かったのだけれど、
共有フォルダが有効にならないという比較的フェイタルな事態に遭遇。

「これだから…」などという自分勝手な呆れ感を抱きながらグーグリングしていると
[ubuntu] Auto mounting shared folders with open-vm-tools というアメリカ語の記事を発見。
どうやら共有できないのではなく、自動でマウントしてくれないらしい。

上記URLに掲載されてる open-vm-tools (シェルスクリプト) をためらいもなく実行すると
Syntax Error と怒って仕事してくれなかった上に、
よくよく見るとオリジナルのスクリプトとあまりにも構造が違っていたので
手動で改造した結果がこちら。

#!/bin/sh

### BEGIN INIT INFO
# Provides:		open-vm-tools
# Required-Start:	$local_fs $remote_fs
# Required-Stop:	$local_fs $remote_fs
# X-Start-Before:
# X-Stop-After:
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Description:		Runs the open-vm-tools services
# Short-Description:	Runs the open-vm-tools services
### END INIT INFO

. /lib/lsb/init-functions

exit_if_not_in_vm () {
	if [ ! -x /usr/bin/vmware-checkvm ] || ! /usr/bin/vmware-checkvm > /dev/null 2>&1
	then
		echo "Not starting as we're not running in a vm."
		exit 0
	fi
}

case "${1}" in
	start)
		# Check if we're running inside VMWare
		exit_if_not_in_vm

		log_daemon_msg "Loading open-vm-tools modules"
		log_progress_msg "vmhgfs"; modprobe vmhgfs
		log_progress_msg "vmxnet"; modprobe vmxnet
# ここに2行追加
		log_daemon_msg "Mounting hgfs"
		mount -t vmhgfs .host:/ /mnt/hgfs

		log_end_msg 0

		log_daemon_msg "Remove pcnet32 module, if vmxnet is loaded"
		# check if vmxnet module is loaded
		loaded="$(lsmod | grep -o vmxnet)"
		if [ "$loaded" = "vmxnet" ]; then
			# Removes pcnet32 module if vmxnet module is loaded
			modprobe -r vmxnet
			log_progress_msg "Removing pcnet32"; modprobe -r pcnet32
			modprobe vmxnet
		fi
		log_end_msg 0

		log_daemon_msg "Starting open-vm daemon" "vmtoolsd"
		/usr/bin/vmtoolsd --background /var/run/vmtoolsd.pid
		log_end_msg 0
		;;

	stop)
		# Check if we're running inside VMWare
		exit_if_not_in_vm
# ここにも2行追加
# ※ vmtoolsd のプロセスをころる前に umount するとエラーを吐くとコメントで情報を頂いたので位置だけ変更
		log_daemon_msg "Unmounting /mnt/hgfs"
		umount /mnt/hgfs

		log_daemon_msg "Stopping open-vm guest daemon" "vmtoolsd"

		if [ -f /var/run/vmtoolsd.pid ]
		then
			kill $(cat /var/run/vmtoolsd.pid)
		fi

		log_end_msg 0

		log_daemon_msg "Removing open-vm-tools modules"
		log_progress_msg "vmhgfs"; modprobe -r vmhgfs
		log_progress_msg "vmxnet"; modprobe -r vmxnet

		log_end_msg 0
		;;

	force-reload|restart)
		${0} stop
		sleep 1
		${0} start
		;;

	*)
		log_success_msg "Usage: ${0} {start|stop|restart|force-reload}"
		exit 1
		;;
esac

実際には mount,umount コマンドをそれぞれ start,stop に追加するだけなんですが、
mount -t vmhgfs .host:/ /mnt/hgfs ってなんだよ覚えられる気がしないよ。
起動時に毎回このコマンドを実行するのかと思うと何かこみ上げてくるものがありますね。

$ sudo /etc/init.d/open-vm-tools start
* Loading open-vm-tools modules                                         [ OK ]
* Mounting hgfs                                                         [ OK ] 
* Remove pcnet32 module, if vmxnet is loaded                            [ OK ] 
* Starting open-vm daemon vmtoolsd                                      [ OK ]
$ ls /mnt/hgfs/
C/ D/ E/ J/

何はともあれ、これで共有フォルダがゲスト側から見えるようになりました。
結論:

  • VMware Player ユーザには open-vm-tools のほうがいい
  • デフォルトで自動マウントするようにして欲しい
  • 作業が中断されて2時間経った

2012年11月17日

Linux版ChromeにSmoothGesturesをインストール(ドラッグ&ドロップ)


結論から言うと、ChromeのバグのせいでLinux環境で使えるマウスジェスチャ拡張がほぼ無いのです。
どうも右クリックイベントをうまく取れないらしく、
ジェスチャーと同時に右クリックメニューが開いてしまう。

唯一まともに動作していたのが Smooth Gestures だったのですが、
これもChromeウェブストアから「マルウェア/スパイウェア」認定されて消滅。*1

ではLinux環境ではマウスジェスチャは絶望的なのか、と思って調べたところ、
有志の方が以下のサイトで『情報送信しない版』と『Linux用パッチ』を公開されてました。

しかし最近のChromeさんはとってもセキュリティに敏感で
ウェブストア以外からは拡張機能をインストールさせない
という制限を設けているため、そのままインストールというわけにはいきませんでした。

曰く「どうしてもインストールしたいなら『ツール→拡張機能』タブにファイルをドロップしろ」
とのことでしたが、すみませんChromeさんちょっといいですか、
Nautilusからドラッグしても反応してくれませんよね?

Webページにドラッグするとしっかり「インストールできません」と言うくせに
なぜ拡張機能画面ではドラッグ&ドロップイベントを認識してくれないのですか。
セキュリティ面でちょっと厳しすぎやしませんか(#^ω^)

というわけで解決策は Sidan kunde inte hittas | Framkalla dina fotominnen になりました。
幸い Ubuntu 12.10 では apt-get 一発で行けたのでご参考までに。

シェル:

$ sudo apt-get install dragbox
$ dragbox smooth-gestures-0.15.4.crx
$ dragbox smooth-gestures-plugin-0.8.crx

これで dragbox のウィンドウが現れるので、
ここからChromeの『拡張機能タブ』にドロップしてやると、
今度こそようやくインストールしてくれました。

smooth-gestures-0.15.4.crx 単体でも動作はするのですが、
右クリックメニューを出したいときに連打しなければならないなど
操作する上で地味にフラストレーションが溜まるので、
後者の smooth-gestures-plugin-0.8.crx を入れてやることで
Windows環境と同じ操作感を得ることができます。

Googleさん、早くバグ直して欲しいです……。
ついでに、GoogleIME(mozc)の辞書もLinuxで使えるようにしてください……。
ではまた!

*1:実際、何らかの情報を特定のサイトへ送信していたそうです。

2012年04月14日

MBRを上書きしてしまったときにgrubを修復する

久々のエントリ。
今回、UbuntuインストールされているマシンにWindows7をインストールして
その際MBRが上書きされてしまったんで、修復方法をメモっておきます。

パーティション構成:

  • /dev/sda1: NTFS (Windows 7)
  • /dev/sda2: ext4 (Ubuntu 11.10)
  • /dev/sda3: NTFS (予備)
  • /dev/sda4: ext4 (予備)

使用したのは Ubuntu 11.10 のインストールCD。
CD起動時のメニューで [F6] を押して(押さなくてもいいかも)
ブートオプションを表示し、

file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.gz

というようになっているところの boot=casper
root=/dev/sda2 (Ubuntuがインストールされているパーティション)に変更します。

で、「インストールされているUbuntuを起動」とかした気がする。
するとハードディスク(/dev/sda2)のUbuntuが起動するので、
rootユーザになって(あるいはsudoで)grubを再インストールしてやります。

# update-grub
# grub-install

おしまい。
update-grub が自動的に他のOSを見つけてgrub.cfgをいじくってくれるので、
Windows7も自動的に認識され、ブートされるようになりました。

もちろん、MBRを書き換えるための grub-install も忘れずに。
これでもう何も恐くないですね。

2012年04月04日

10分でできる: Emacs使いにすすめるリッチなVIM環境構築(Case Study of @naoty_k)

本気出してコーディングするときはEmacs、ちょっとした設定ファイルを変更するのはVi
そんなスタイルで開発している方はいませんか?
そう、私です。^o^

例えばRailsしてるとき、コントローラやビューはEmacsで書くけど、
migrationはViで編集する
なんてことはしょっちゅうです。
他にも /etc にある各種ファイルを sudo vi で端末で作業できるのは魅力的。

だからいつも sudo apt-get install vim とするだけで
.vimrc? なにそれ? という状態で何も設定せず
Ubuntuデフォルトのまま作業していたのですが、やはり困ることがあります。

いや、困るというよりは「やりにくい」が正しい表現なんですが、
今回Twitter上で @naoty_k さんからさまざまなアドバイスをいただきました。
その設定をしたあとのViの快適さといったらありません。
透過的にサポートしてくれる機能満載なので、細かい設定や使い方は一切無し。*1

  • 追記:
    • コメント欄にて @naoty_k さんご本人が、一歩進んだ使い方を紹介してくれています。是非ご参照あれ。

さてそれでは、10分でVIMをバリバリチューニングしてみましょう。

vundle

VIMには vundle という、Rails3で言うところの bundler があります。
詳細については上記参考URLを見ていただくとして、まとめとして今回やったことをメモ。

シェル:

$ mkdir -p ~/.vim/bundle/  # 各種プラグイン用
$ git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle  # vundle をインストール

colorscheme railscasts

@naoty_k さんはVIMのカラーテーマに railscasts を採用なさっているそうです。
これでVIMがよりカラフルになると、多分そういうわけです。

上記URL(の下のほうのリンク)から railscasts.vim をダウンロードして、
~/.vim/colors/ ディレクトリに放り込みます。

$ mkdir -p ~/.vim/colors/
$ mv railscasts.vim ~/.vim/colors/

しかしこのままでは後述の.vimrcでは使えないので、
Ubuntuを使っている場合は以下のようにします。*2

$ sudo apt-get install ncurses-term

.vimrc

@naoty_k さんは github に普段使っている dot ファイルを公開されているので、
まずはそこから .vimrcパクって持ってきます。
中身は……Emacs使いの僕には何が何やらですが、凄そうです。

前述の railscasts を使うために、Ubuntu用の設定ちょっとだけ書き加えます。*3
.vimrc(7行目付近):

" ↓コメントアウト
" colorscheme railscasts

" for gnome-terminal on Ubuntu
if $COLORTERM == 'gnome-terminal'
  set term=gnome-256color
  colorscheme railscasts
else
  colorscheme default
endif

.vimrc のコメントは行頭に " (ダブルクォート)を置きます。

プラグインのインストール

ここまでの状態で vim を起動しても、まだ完璧ではありません。
vundle によるプラグインのインストールが終わっていないからです。
VIMを起動して、 :BundleInstall と入力してEnter。

すると .vimrc に記述されているプラグインが続々とインストールされていき、
"Done" と表示されたら正常にインストールされた証拠です。

完了!

これで全ての準備が整いました。
適当にファイルを編集してみるとすぐにわかるのはコードの自動補完ですね。
ちょうどEmacsで言うところの auto-complete のような感覚で使うことができます。

また、行番号が表示されていたり、行末に余計なスペースがあると表示してくれたり
自動でインデントしてくれたり、他にも他にも、まだ僕が触っていない便利な機能があることでしょう。
これまでとはまったく違う、何ともリッチなVIMが出来上がってしまいました。*4

これで思う存分VIMで快適なコーディングをすることが出来そうです。
@naoty_k さんどうもありがとうございました!

おまけ

プラグインのアップデート

VIMを起動した状態で :BundleInstall! を実行すると、
既存のプラグインを自動でアップデートしてくれるらしいです。
これは vundle の機能なので、詳しくはそちらを。

もしかしたら関係あるかも知れない「ハイライトが機能しない」問題

環境変数 $VIM と $VIMRUNTIME が関連しているかも?
VIMには膨大な数の syntax ファイルが用意されていますが、
これを探すのに $VIM もしくは $VIMRUNTIME のパスを探しに行くみたいです。

Ubuntuの場合は /usr/share/vim/vimcurrent というシンボリックリンクがそれなので、
.bashrc や .zshrc に

export VIM=/usr/share/vim/vimcurrent
export VIMRUNTIME=$VIM

と書いておくと、ある種のおまじないになるかも知れません。
このあたりは.vimrcというよりVIMそのものの仕様になってくるので
今回のエントリではあまり触れないようにしておきます。

*1:実を言うとまだプラグインについて完全に調査していないので、より便利な使い方はもちろんあります。ただ今回はあくまでも『まとめ』なので、それについては省略させてください。

*2:railscasts.vimのコメントから。

*3:これにより、gnome-terminalの提供する256色がVIM上で使用可能になる ハズ です。

*4:@naoty_kさんはガチVIM使いなので当然といえば当然ですけども。