PCが壊れました。

表題のとおりです。より正確に表現すると、LMDE2 のパッケージマネージャの依存関係データベースがふっ飛んだ上に systemd などの OS の実行に必要な機能が使えなくなりました。

電源を入れても Linux Mint のロゴが表示されるだけで、init の次でコケている模様。ちょうど LMDE3 もリリースされていることだし、必要なファイルを避難させてインストールし直すことにしました。

ストレージ構成

元々の環境は以下のとおりです。

  • /dev/sda … GRUB
    • /dev/sda1 … スワップ領域
    • /dev/sda2 … 「/」にマウント。ext4。
  • /dev/sdb
    • /dev/sdb1 … RAID10 アレイ (1)
  • /dev/sdc
    • /dev/sdc1 … RAID10 アレイ (2)
  • /dev/sdd
    • /dev/sdd1 … RAID10 アレイ (3)
  • /dev/sde
    • /dev/sde1 … RAID10 アレイ (4)

RAID10 環境の復旧と、パーティションを切っていない 「/」 以下の必要ファイルの復旧が目的です。なお、sda は 256GB SSD、sdb 〜 sde はそれぞれ 3TB の HDDです。

ソフトウェア RAID ツールの mdadm を用いて、sdb1 〜 sde1 までの RAID10 アレイすべてを合わせて /dev/md0 として認識させていました。

サルベージ

まず、対象マシンが起動できないとどうにもこうにもならないので、別マシンで LMDE3 x64 の Live DVD イメージをダウンロードUnetbootin を使って、ブータブル USB キーを作成しました。

次に対象マシンの電源を入れ、ブートシーケンス設定で USB Key をプライマリに設定。作成したブータブル USB キーを USB ポートに挿して、LMDE3 をライブ起動しました。(…ライブ起動っていう表現でいいのかな。要は、対象マシンの内蔵ストレージにインストールせずに起動。)

ライブ起動した LMDE3 上のコンソールで /dev を確認すると、sda 〜 sde まですべて確認することができました。

SSDのsda1とHDDのsdb〜sdeたち。
sudo mkdir /mnt/sda1
sudo mount /dev/sda1 /mnt/sda1

/dev/sda1 をマウントすると、そのまま LMDE2 の「/」を覗くことができます。ここから必要なファイルを RAID ストレージに移動したいのですが、ライブ起動した LMDE3 には /dev/md0 がありません。

そこで、ターミナルより

sudo apt update
sudo apt install mdadm

とし、ソフトウェア RAID の mdadm を導入。

sudo mdadm --assemble --scan

すると、RAID アレイを認識し /dev/md/0 と /dev/md0 の仮想デバイスファイルが作成されました。あとはマウントして旧「/」配下のファイルを救出するだけです。

# マウントポイントを作成
sudo mkdir /mnt/md0
# マウント
sudo mount /dev/md0 /mnt/md0
# バックアップディレクトリを作成
sudo mkdir /mnt/md0/backup
# バックアップ
sudo time rsync -aAXv /mnt/sda1/ --exclude={"/mnt/sda1/dev/*",\
"/mnt/sda1/proc/*","/mnt/sda1/sys/*","/mnt/sda1/tmp/*",\
"/mnt/sda1/run/*","/mnt/sda1/mnt/*","/mnt/sda1/media/*",\
"v/lost+found"} /mnt/md0/backup; date

やたら時間がかかったので、 /mnt/md0 内にあるマンガを mcomix で読みながら待っていました。バックアップが終わったら、/dev/sda1 および /dev/md0 をアンマウントし、新しい OS をインストールします。

LMDE3 Cindy x64 のインストール

デスクトップにある「Linux Mintをインストール」アイコンから GUI で入れていきます。最近のディストリはインストールがとても簡単だし、Youtube を見ながらネットサーフィンしながらできるし、とても快適ですね〜。

ストレージの構成だけ注意して、 /dev/sda1 をこれまでどおりスワップ領域に、/dev/sda2 を新しい OS の「/」にして EXT4 でフォーマット。/dev/sda に GRUB をインストールする設定で進みました。

あと、セットアップウィザード中で行ったことといえば、僕は英語キーボード (PFU Happy Hacking Keyboard) を使っているのでキーレイアウトを US 配列にした程度です。滞りなくできました。

インストール完了後、USB キーを抜いて内蔵ストレージから再起動します。

環境の再構築

無事に起動できたら、また mdadm をインストール。マウントします。

sudo apt update
sudo apt upgrade
sudo apt install mdadm
sudo mdadm --asemble --scan
sudo mount /dev/md0 /mnt

OS 上で一度スキャンすると、/etc/mdadm/mdadm.conf にアレイ情報が書き込まれるようですね。

続いて、ユーザーやグループ情報の移動を行い、これまで使っていたソフトのインストールを行いました。

起動できなくなった時は少し焦ったけど、とりあえず使える程度までには現状回復できたし、ゴミファイルの整理にもなって良かったと思います。

イシューズ

下記は積み項目。

  • IMの調子が変。UIM で SKK 使いなんだけど、入力のタイミングでキーが変なことになったり、辞書を引き継げなかったり。
  • GeForce GTX460 の nVidia の公式ドライバの組み込みに失敗する。いや、組み込みはできるんだけど、cinnamon がクラッシュする。以前は lightdm を停止して X を殺して、端末から startx してたら起動できたけどそれも無理。んー、今のところ、noveau ドライバで問題ないけど…。グラボの替え時かなぁ。
  • 動画やコミックアーカイブのサムネイル表示が nemo でできなくなってる。ffmpegthumbnailer や ffmpegthumbs をインストールしても改善せず。謎ファイル名の動画が多いんで割と不便。
  • Ruby や Python といったプログラミング環境は必要になったら順次、入れていこうと思う。とりあえず Git は入れておいた。
  • オーディオや動画のオーサリングツール系も必要に応じて入れる。
  • LMDE3って標準で mozjpeg が入ってるんだ!

LMDE2 (Linux Mint) に Easystroke を入れました

LMDE2 (Linux Mint Debian Edition) に、X 上でマウスジェスチャを実現する Easystroke を入れました。

Ubuntu では公式リポジトリに登録されているので APT で入りますが、LMDE、Linux Mint、Debian などはありません。なので、公式を参考に自分でビルドします。

準備

次のコマンドで必要なものを入れます。

sudo apt-get install g++ libboost-serialization-dev libgtkmm-3.0-dev libxtst-dev libdbus-glib-1-dev intltool xserver-xorg-dev

clone と make

github.com から clone してきて、 make します。 ./configure は必要ありません。

git clone git@github.com:thjaeger/easystroke.git
cd easystroke
make

git を入れていない場合は、

wget https://github.com/thjaeger/easystroke/archive/master.zip
unzip master.zip

でも良いと思います。

make install

ビルドが通ったらインストール。

$ sudo make install
install -Ds easystroke /usr/local/bin/easystroke
install -D -m 644 easystroke.svg /usr/local/share/icons/hicolor/scalable/apps/easystroke.svg
install -D -m 644 easystroke.desktop /usr/local/share/applications/easystroke.desktop
for f in po/cs/LC_MESSAGES/easystroke.mo po/he/LC_MESSAGES/easystroke.mo po/zh_CN/LC_MESSAGES/easystroke.mo po/de/LC_MESSAGES/easystroke.mo po/ja/LC_MESSAGES/easystroke.mo po/ca/LC_MESSAGES/easystroke.mo po/hu/LC_MESSAGES/easystroke.mo po/pl/LC_MESSAGES/easystroke.mo po/it/LC_MESSAGES/easystroke.mo po/ru/LC_MESSAGES/easystroke.mo po/zh_TW/LC_MESSAGES/easystroke.mo po/el/LC_MESSAGES/easystroke.mo po/ko/LC_MESSAGES/easystroke.mo po/vi/LC_MESSAGES/easystroke.mo po/es/LC_MESSAGES/easystroke.mo po/fi/LC_MESSAGES/easystroke.mo po/fr/LC_MESSAGES/easystroke.mo; do \
install -D -m 644 $f `echo $f | sed "s|^po/|/usr/local/share/locale/|"`; \
done

上記のようなファイルが入っていきました。

実行

インストールが終わったら早速実行。

easystroke

とコマンドを打つと、設定画面が表示されます。

「アプリケーションを追加」を押すと、xkill のようにカーソルが十字になって、設定したいアプリケーションの画面をクリックすることによって指定できます。

LMDE cinnamon の標準ファイラである nemo にジェスチャを登録した様子です。私の環境だけかもしれませんが、最初にジェスチャ・ボタンが「ボタン 2」(つまり中ボタン)になっていてちょっと迷いましたが、「設定」の「動作」にある「ジェスチャ・ボタン」で右ボタンに変更することができました。

また、Google Chrome や Firefox など、それぞれでジェスチャを行なっているアプリと干渉させたくない場合は、「高度設定」の「動作」の

Only enable easystroke for applications listed on ‘Actions’ tab

にチェックを入れておけば、Easystroke で設定したアプリ内だけで有効になります。

あとは、お好みで「トレイアイコンを表示」「Easystroke を自動起動」などを有効にしておくと快適に使えます。

参考

Linux で Microsoft Xbox 360 Kinect センサーを使ってみました

昨日、Amazon で中古で売ってあったMicrosoft Xbox 360 Kinect センサーが届いたので、早速 Linux で使ってみました。

環境

OS は Linux Mint の Debian Edition です(略して LMDE )。 Ubuntu などの Debian 系の Linux なら同じ手順でいけるかもしれません。

使いそうなものをインストール

とりあえず APT の公式リポジトリで freenectオープンソース版の Kinect ライブラリ)で検索すると libfreenect-bin というパッケージがあったのでインストール。

sudo aptitude install libfreenect-bin

コマンドがいくつか追加されました。

$ sudo dpkg -L libfreenect-bin
--- snip ---
/usr/bin/freenect-cppview
/usr/bin/freenect-glpclview
/usr/bin/freenect-glview
/usr/bin/fakenect
/usr/bin/fakenect-record
--- snip ---

Kinect を接続

Kinect の電源を入れて、USB でホストと接続します。 dmesg の様子は次のとおり。

$ dmesg
[1969221.943934] usb 1-7.2.2: new full-speed USB device number 98 using xhci_hcd
[1969222.056332] usb 1-7.2.2: New USB device found, idVendor=045e, idProduct=02b0
[1969222.056334] usb 1-7.2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[1969222.056336] usb 1-7.2.2: Product: Xbox NUI Motor
[1969222.056337] usb 1-7.2.2: Manufacturer: Microsoft
[1969261.058907] usb 1-7.2.1: new high-speed USB device number 99 using xhci_hcd
[1969261.164501] usb 1-7.2.1: New USB device found, idVendor=045e, idProduct=02ad
[1969261.164503] usb 1-7.2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[1969261.164504] usb 1-7.2.1: Product: Xbox Kinect Audio, © 2011 Microsoft Corporation. All rights reserved.
[1969261.164505] usb 1-7.2.1: Manufacturer: Microsoft
[1969261.164505] usb 1-7.2.1: SerialNumber: ****************
[1969262.592523] usb 1-7.2.3: new high-speed USB device number 100 using xhci_hcd
[1969262.699765] usb 1-7.2.3: New USB device found, idVendor=045e, idProduct=02ae
[1969262.699766] usb 1-7.2.3: New USB device strings: Mfr=2, Product=1, SerialNumber=3
[1969262.699768] usb 1-7.2.3: Product: Xbox NUI Camera
[1969262.699768] usb 1-7.2.3: Manufacturer: Microsoft
[1969262.699769] usb 1-7.2.3: SerialNumber: ****************
[1969263.711841] gspca_main: v2.14.0 registered
[1969263.712338] gspca_main: kinect-2.14.0 probing 045e:02ae
[1969263.712389] usbcore: registered new interface driver kinect
[1969716.950137] gspca_main: kinect-2.14.0 probing 045e:02ae

freenect コマンドを実行

なんだかそのまま認識しているみたいですね!追加されたコマンドを実行してみます。

freenect-glview

ウィンドウが表示され、左に深度マップ、右に可視光線カメラ映像が表示されます。

上は左の部分だけのキャプチャです。意外にもすんなりと深度が出てますね! さすがにハードウェアで処理していることもあり、動きも滑らかです。

次に PCL (Point Cloud Library) を使ってるっぽいコマンドを実行してみます。

freenect-glpclview

リアルタイムに点群化されたものが見れました。これは楽しい…。

2016年までの記事では ROS 関係のパッケージを入れている方が多いようですが、今はなくてもいいのかな。

RTAB-Map を導入

ここまで拍子抜けするほど順調だったので、調子に乗って部屋のスキャンをしてみるべく、RTAB-Map を導入しようとしました。流れとしては

  1. RTAB-Map は Debian (というかLMDE) の公式リポジトリにないのでソースコードからビルド
  2. Kinect が認識されない、メニューから選べない。→ freenect2 (v2 ベースのライブラリ)が必要。
  3. freenect2 もリポジトリにないのでソースコードからビルド → いろいろとライブラリを追加してみるが cmake . で LibUSB_LIBRARY がないとかで失敗。
  4. どうも libusb のバージョンが公式リポにある最新の 1.0.19 ではなく 1.0.20 以降が必要な模様。
  5. freenect の作者?の人が PPA に deb な libusb v1.0.20 置いてるよー/(^o^)\ → Ubuntu じゃねえええ \(^o^)/
  6. Debian 環境(LMDEだってば)で PPA リポを追加するも 404 Not found…Dockerまわりもあるので source.list 汚したくないので深追いは禁物。
  7. もうこうなると libusb の 1.0.20 をコードからビルドするか…!
  8. sudo aptitude purge libusb-1.0-0-dev → sudo aptitude install libudev-dev → ./configure → make → sudo make install。/usr/local/lib に入っていった…、まあいいや。
  9. freenect2 の cmake . が通らない!調べたら libGL.so のリンク切れしてる場合があるらしい→切れてた→ ln し直し。
  10. ビルド通った!もう面倒なのでついでに freenect2.so も sudo make install。これも /usr/local/lib に…まあいいか。
  11. RTAB-Map の再ビルド。freenect2 が YES になってる!ビルド通った…!
  12. わくてかしながら bin/rtabmap を実行→freenect2 が有効になってる!キャプチャ開始…………
  13. CameraFreenect2: no device connected or failure opening the default one! Note that rtabmap should link on libusb of libfreenect2. Tip, before starting rtabmap: "$ export LD_LIBRARY_PATH=~/libfreenect2/depends/libusb/lib:$LD_LIBRARY_PATH" と出てカメラ初期化失敗。
  14. あかん(あかん) ldconfig -p してもちゃんと freenect2.so は見えてるし、これは何なんだー。
  15. /usr/lib/x86_64-linux-gnu/ 配下に(多分)古い libusb と思われるものを発見、移動したのち sudo ldconfig
  16. RTAB-Map を cmake からやり直し、状況変わらず。

ていうかそもそもハードが v2 に対応してないパターンじゃ…よ、よし寝よう (:3っ )っ

freenect2 が入っていった場所

$ sudo make install
[  3%] Built target generate_resources_tool
[ 89%] Built target freenect2
[100%] Built target Protonect
Linking CXX shared library CMakeFiles/CMakeRelink.dir/libfreenect2.so
Install the project...
-- Install configuration: "RelWithDebInfo"
-- Installing: /usr/local/lib/libfreenect2.so.0.2.0
-- Installing: /usr/local/lib/libfreenect2.so.0.2
-- Installing: /usr/local/lib/libfreenect2.so
-- Installing: /usr/local/include/libfreenect2
-- Installing: /usr/local/include/libfreenect2/frame_listener_impl.h
-- Installing: /usr/local/include/libfreenect2/frame_listener.hpp
-- Installing: /usr/local/include/libfreenect2/registration.h
-- Installing: /usr/local/include/libfreenect2/logger.h
-- Installing: /usr/local/include/libfreenect2/packet_pipeline.h
-- Installing: /usr/local/include/libfreenect2/libfreenect2.hpp
-- Installing: /usr/local/include/libfreenect2
-- Installing: /usr/local/include/libfreenect2/export.h
-- Installing: /usr/local/include/libfreenect2/config.h
-- Installing: /usr/local/lib/cmake/freenect2/freenect2Config.cmake
-- Installing: /usr/local/lib/pkgconfig/freenect2.pc

自前ビルドの libusb が入っていった場所

$ sudo make install 
Making install in libusb
make[1]: Entering directory '/tmp/libusb-1.0.20/libusb'
make[2]: Entering directory '/tmp/libusb-1.0.20/libusb'
make[3]: Entering directory '/tmp/libusb-1.0.20/libusb'
 /bin/mkdir -p '/usr/local/lib'
 /bin/bash ../libtool   --mode=install /usr/bin/install -c   libusb-1.0.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libusb-1.0.so.0.1.0 /usr/local/lib/libusb-1.0.so.0.1.0
libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.so.0.1.0 libusb-1.0.so.0 || { rm -f libusb-1.0.so.0 && ln -s libusb-1.0.so.0.1.0 libusb-1.0.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.so.0.1.0 libusb-1.0.so || { rm -f libusb-1.0.so && ln -s libusb-1.0.so.0.1.0 libusb-1.0.so; }; })
libtool: install: /usr/bin/install -c .libs/libusb-1.0.lai /usr/local/lib/libusb-1.0.la
libtool: install: /usr/bin/install -c .libs/libusb-1.0.a /usr/local/lib/libusb-1.0.a
libtool: install: chmod 644 /usr/local/lib/libusb-1.0.a
libtool: install: ranlib /usr/local/lib/libusb-1.0.a
libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
 /bin/mkdir -p '/usr/local/include/libusb-1.0'
 /usr/bin/install -c -m 644 libusb.h '/usr/local/include/libusb-1.0'
make[3]: Leaving directory '/tmp/libusb-1.0.20/libusb'
make[2]: Leaving directory '/tmp/libusb-1.0.20/libusb'
make[1]: Leaving directory '/tmp/libusb-1.0.20/libusb'
Making install in doc
make[1]: Entering directory '/tmp/libusb-1.0.20/doc'
make[2]: Entering directory '/tmp/libusb-1.0.20/doc'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/tmp/libusb-1.0.20/doc'
make[1]: Leaving directory '/tmp/libusb-1.0.20/doc'
make[1]: Entering directory '/tmp/libusb-1.0.20'
make[2]: Entering directory '/tmp/libusb-1.0.20'
make[2]: Nothing to be done for 'install-exec-am'.
 /bin/mkdir -p '/usr/local/lib/pkgconfig'
 /usr/bin/install -c -m 644 libusb-1.0.pc '/usr/local/lib/pkgconfig'
make[2]: Leaving directory '/tmp/libusb-1.0.20'
make[1]: Leaving directory '/tmp/libusb-1.0.20'

参考

OpenCASCADE 6.9.0 を LMDE でビルド

先日、自宅サーバの Debian GNU/Linux Jessie 32bit 版で OpenCASCADE 6.9.0sirenビルドしました

自宅サーバは、SSH で外部からアクセスして開発ができるので便利である一方、オンボード Atom 搭載の省電力サーバなのでコンパイルにはもの凄く時間がかかります。そこで、Intel Core i7 を搭載した普段使い用のラップトップでもビルドしようと思います。

ラップトップは、LMDE(Linux Mint Debian Edition) の無印、あえて言うなら version 1 です。先日、LMDE 2 がリリースされましたが環境を壊すかもしれないのが怖くてまだ移行していません。なお、こちらは 64 bit です。

OCCT 6.8.0 ベースの siren をビルドして開発に使っていたので、こちらも難なくビルドできると思いきや、VTK を指定しないと Visualization 以下のモジュールが上手くビルドすることができませんでした。

configure の出力では、VTK は optional 扱いになっていたのですが、必須なのかなあ…?たしかに先日の Debian の記事でも明示的に VTK を指定していました。なお、VTK は自分の記憶が正しければ 6.8.0 の時点で既に OCCT に利用されていたようですが、その時は確実に optional だったはずです。(VTK をインストールしなくても Visualization 以下のビルドが通っていました)

ないなら入れてしまえと apt-cache search vtk するも、バージョン 5.8 しか公式リポジトリにはありませんでした。試しに libvtk5.8, libvtk5-dev を install して OCCT 6.9.0 をビルドしてみても、やはりビルドが通りません。 なお、Debian の Jessie には公式リポジトリに VTK 6.1 があったため、APT 経由で入れたらビルドが通りました。

ということで、ソースコードを取得して自分でビルドしましょう。VTK の公式サイトのダウンロードページから、対象となる 6.1 の tar ボールをダウンロードします。

cd /tmp
wget http://www.vtk.org/files/release/6.1/VTK-6.1.0.tar.gz
tar zxvf VTK-6.1.0.tar.gz
cd VTK-6.1.0

README.html にビルド方法が載っているので、それに従ってビルドします。

cmake.
make

README.html では cmake ではなく curses 版の cmake である ccmake と書いてありますが、cmake でも通ります。

ビルドにはもちろん CMake が必要です。また、依存しているライブラリもいくつかあると思いますが、幸運なことに自分の環境では追加ライブラリを指定することなく全てのビルドが成功しました。VTK を Debian で APT 経由からインストールした際、200 MB 前後の依存ライブラリがどっと降ってきたので心配でした。ヨカッタ。

例に漏れず、インストールは次のようにします。

sudo make install

インストールによって、ヘッダファイルは /usr/local/include/vtk-6.1 以下に、ライブラリファイルは /usr/local/lib 以下に設置されました。インストールパスは cmake オプションで指定できるはずです。

さて、これで OCCT 6.9.0 のビルド環境は整ったはずです。前回の手順どおりに、一気にやっちゃいます。

cd /tmp
wget http://files.opencascade.com/OCCT/OCC_6.9.0_release/opencascade-6.9.0.tgz
tar zxvf opencascade-6.9.0.tgz
cd opencascade-6.9.0/
./build_configure
./configure -prefix=/opt/occ690 \
-with-vtk-include=/usr/local/include/vtk-6.1 \
-with-vtk-library=/usr/local/lib

configure の出力で Visualization 以下のパッケージもすべて「Yes」になっていることを確認し、

make -j8 install

で、ビルド&インストール。 ビルド時間を計測すると次のとおりになりました。

real  17m11.411s
user  97m46.908s
sys   5m26.720s

前回、3時間以上かかっていたビルドは17分で終わりました。これは強い。

6.9.0 を用いて siren をビルドし直すとこちらでもちゃんと動いているようです。ひとまず安心です。

さようなら Ubuntu、こんにちは Linux Mint

ここ5年ほどメイン機で使っていた Ubuntu にとうとう別れを告げました。 Ubuntu の採用を辞める理由として挙げるとすれば以下の点です。

重い?

ハードウェアは 2012 年の暮れに SONY の公式オンラインストアで購入した VAIO Z で、Core i7 の 8GB RAM、SSD 搭載機です。 購入から1年半が経ちますが、まだまだ陳腐化していないスペックだと思います。グラフィックはインテルのHDグラフィックス…とオンボードのものですが、一昔前の安物グラボに比べれば、よっぽど安定していて高速なハズです。

なので、特に処理能力の限界を感じていたわけではありませんでした。もちろん、無駄に○○しているな〜と感じる点はありましたが、ハードウェア的なボトルネックが顕著になる以前に、私の自宅の WiFi の不安定さであったり、ファイル置き場になっている自宅サーバーのスペック不足でひっかかったりしていました。

Unity デスクトップ環境な Ubuntu 自体は大手ディストリの中でもかなり「重い」部類ではあると思いますが、そんなに苦になることはなかったと思います。

Unity まわりのUI設計のマズさ

動作の軽快さよりも、こちらの方がネックでした。使い勝手が悪いと悪評の高い Unity をやめようと思い、Classic デスクトップ環境に切り替えていた時期もありましたが、やはりしっくり来ず。 特に問題だったのが、タスクバーとメインメニューの統合です。これは登場した当初から叩かれていたので今更詳しく書くのもアレですので、要点だけを書いておきます。

  • 広いデスクトップ上でウィンドウ表示していると、左上のタスクバーにメインメニューがあると、その持ち主であるウィンドウから遠い。これは Mac なんかもそうかな?
  • GIMP などの複数ウィンドウで構成されているアプリケーションの場合、メインウィンドウがアクティブじゃないとメインメニューが表示されなくてかなり困る。つまりツールウィンドウを選択している時にタスクバーにカーソルを持っていっても、期待したメニュー項目がないんですよ。
  • タスクバーにマウス・ホバーさせないとメニューが表示されない。メニューが常に表示されていればマウスをダイレクトにポインティングできますが、一度タスクバーに盲目状態でカーソルを持っていく→表示される→改めて目的のメニュー項目までカーソルを持っていく、のパターンになって、マウス操作主体のアプリケーションだと軽く死ねます。

もともと、「ウィンドウごとにタイトルバーの下にメニュー領域を確保するのがスペース的な無駄だ」という発想だったのか、Mac の UI を真似したのか分かりませんが、使いづらく感じる人のほうが多そうですよね。前者の理由だった場合、Unity デスクトップ環境の左側に表示されているアプリケーションアイコンのほうがよっぽど邪魔です。自動的に隠すこともできますが、それでもアイコンサイズの設定できる最小値が大きすぎます。 最近のディスプレイは、ほとんどがワイド画面であるため、縦方向に領域を占有するメインメニューよりも、横方向に領域を占有するアプリケーションアイコンの方が犠牲になるコストは小さいかもしれませんが、なんだかよく分かりません。また、タブレット PC やスマホなど、タッチ操作をしなければならない端末でも、標準のマウス環境でも、どちらでも対応できるような UI 設計にしている戦略的な意味合いがありそうな気がします。どちらでも対応、と書くと聞こえが良いですが、言い替えると、どちらも中途半端ってことでしょう。こういうデザインのごり押しを見ていると、もはや商売戦略ありきの設計である Windows と何も変わらない気がします。

しかし非標準を許さない

Linux なんかの良いところは、自分の好きな環境を自分で組み合わせて最適なモノに囲まれてコンピュータ・ライフを楽しめるところだと思うんですが、ここまで時代が変わってくると、いろんなフレームワークやらライブラリやら、それを動かすためのフレームワークやら、ちょっとした事でもバックエンドの巨大なものをずるずるとひっぱってきたり、そうしているうちに整合性が取れなくなって、ちょっとした事でも意図したとおりの事ができなくなっちゃったりと、もう訳が分からなくなる事も多いです。

Ubuntu はその良い例で、標準的な考え方と Ubuntu 独自の考え方の相性が悪い印象です。ちょっとしたカスタマイズを施して使っていると、次のメジャーアップデートの際に決まって不整合となってしまい、面倒なことが発生していました。ユーザーに自由という権限を与えない変わりに、ある程度責任を持って「ユーザーが何も考えなくても快適な環境が提供されるシステム」だったら良いのですが、そこまで力及ばず、といったところでしょうかね。

カノニカルが以前、「我々のライバルは Windows ではなく、Mac OS だ。」と宣言していた気がしますが、UNIX を Mac OS にしちゃった Apple と カノニカルの大きな違いは、やっぱり力の強さ(資本や行動力)じゃないでしょうか。UNIX 系 OS でいわゆる非 UNIX ユーザも幸せになれるような環境を提供するには、Mac OS や Android といった、もはや UNIX 系とは思えないくらいの商業的かつパーソナルユーザ視点での作り込み、あるいは作り替えが必要になるんじゃないかなと。

まあ、Ubuntu コミュニティやカノニカルも含め、パーソナルユースの Linux、UNIX 環境に大きく貢献しているのは大きな事実ですので、感謝していますし、これからも発展して欲しいと思っています。

細かいところ

Nautilus が 0 バイトの画像や動画のサムネイルを生成する時にすとんと落ちてしまいます。これは致命的に痛いです。totemか何かでサムネイルを生成しているっぽいですが、Nautilus の設定等々をいじるよりも thunar に切り替えて使うケースが多かったです。また、thunar では、SSHFS でマウントしているネットワークストレージも、動画サムネイルを生成しつつもそこそこ素早くファイル一覧を表示できていたのですが、Nautilus では時間がかかった上にタイムアウトするケースも多く見られました。

うちの環境も原因の一つかもしれませんが、ファイラを替えただけでストレスなくオペレーションができている以上、Nautilus の挙動に問題があるような気もします。

これだけ不安定かつぽこぽこと強制終了していたらネモ船長もたまったもんじゃないです。

Linux Mint

Ubuntu の「かゆいところ」はまだ他にもいろいろありますが、Ubuntu の良いところを引き継ぎつつ、悪いところを排除する目標を掲げている Linux Mint に興味を持ちました。

WiFi の設定

まずはともあれ、ネットにつながってないと困ります。最近の先進的なディストリでは、デフォルトで WiFi が有効になっているので嬉しい限りです。自宅のアクセスポイントを選んでパスワードを入れるだけで繋りました。

Firefox syncの同期

次に、ウェブで情報を得たり、動画を見たりしながらセットアップをするので Firefox syncを同期します。自宅、職場、スマホと同期できるってのは本当に助かりますね。

(2014/5/15追記・最新の Firefox では sync の認証方式が変更されたようです。端末によって新方式と旧方式を同時に運用することはできず、全て新しい Firefox にアップデートして新方式にしないと同期が出来ない模様…。Windows 以外のマシンではしっかりしたバージョン管理システムの自動アプデに任せているから色々面倒だなぁ。
ちなみに、Bluetooth のハードウェア認証のような旧方式は、リカバリーキーやらペアコードやら意味が分からないものが多く、どちらがマスターデータでどちらがスレーブなのか分かりづらかったので、予想していたとおり大不評だったんでしょう。
今回の一般的なアカウントによるサーバ認証方式が採用理由は分かりますが、一度同期して運用しちゃってる設定をバージョンアップで変更しなければならないのは労力ですね)

また、宗教上の理由により検索バーのデフォルトは DuckDuckGo っていうアヒルになっていますが、

http://www.linuxmint.com/searchengines.php

の下部にある「Commercial engines(営利目的の検索エンジン)」の Google のアイコンをクリック後、検索バーのアイコンをクリックして出てくるプルダウンメニューより「”Google”を追加」をクリックすれば追加することができます。
さらに「検索バーの管理…」から Google の優先度を上げてやれば、晴れて Google に監視されっぱなし状態になれます。

Ctrl キーと Caps Lock キーの入れ替え

システム設定の「地域と言語の設定」より、キーボードレイアウト→オプションから変更しました。
Xの設定ファイルをいじって、いじっている途中に Caps Lockを押してしまってイライラしていた時代が懐しい…(でも、もはやGUIなしじゃすぐに設定できない体になってしまいそうです)

ちなみにうちは、日本語環境、日本時刻、英語配列キーボードっていう環境です。

uim と skk の導入

Mint にはデフォルトで日本語 IM が入ってないらしいんですが、SKK 使いの自分としては 使いもしない Anthy などが入っているより好都合です。

sudo aptitude install uim uim-gtk3 uim-skk

としてサクっと入れます。
一度、ログアウトしてセッションを開始し直せば、C-j で日本語入力ができるようになりました。

sshfs の導入

以前のファイルは、別のサーバーマシンに預けているので、sshfs を導入。

sudo aptitude install sshfs

で、一般権限でも fuse できるようにします。

sudo chmod o+rw /dev/fuse
sudo chmod 4755 /bin/fusermount

これでマウント可能になりました。簡単すぎる…!

自分コマンドのパスを通す

HOMEの.ファイルを移す

Dropbox のセットアップ

$ mkdir ~/bin
$ wget -O ~/bin/dropbox.py http://www.dropbox.com/download?dl=packages/dropbox.py
$ chmod a+x ~/bin/dropbox.py
$ dropbox.py start -i

Skype

http://download.skype.com/linux/skype-debian_4.2.0.13-1_i386.deb

DraftSight

http://www.3ds.com/ja/products-services/draftsight/download-draftsight/

libgtk2.0-0:i386
/opt/dassault-systemes/DraftSight/Linux/DraftSight
/opt/dassault-systemes/DraftSight/Linux/DraftSight: error while loading shared libraries: libGLU.so.1: cannot open shared object file: No such file or directory

$ sudo apt-file search libGLU.so.1
libglu1-mesa: /usr/lib/x86_64-linux-gnu/libGLU.so.1
libglu1-mesa: /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1

sudo aptitude install libglu1-mesa:i386

デスクレットの追加

「システム設定」の「デスクレット」より、デスクレットとよばれるウィジェットをデスクトップに追加できます。
Ubuntu では天気とカレンダーを表示していたのですが、カレンダーがなかったので AccuWeather Desklet だけを入れてみました。

Monodevelop

sudo aptitude install libmono-cairo2.0-cil

virtualbox

sudo aptitude install virtualbox-qt virtualbox-dkms 

gvim