Ubuntu 13.10 Desktop アップグレード

この週末、遅まきながら自宅のデスクトップ PC の Ubuntu 13.04 (raring) を 13.10 (saucy) にアップグレードしました。まったくトラブルなしというわけにはいかず、些細な問題がいくつか発生しました。

これらの原因究明の深追いにえらく時間をかけてしまったので、紹介したいと思います。

Unity Dash で検索結果が何も出てこなくなった

これは FAQ らしく unity-scope-home というパッケージをインストールしたら直りました (LP:#1233029 )。

まあ普段から APT::Install-Recommendsfalse にして使っていると、こういうことはよく起きます。

iBus 1.5 の設計変更で困った

どうもこれが不満の方、困ってる方が日本にはたくさんいるようで、 日本語のリリースノート では Fcitx の利用を勧めてたりしているようです。自分の場合はこの変更を受け入れ、 IME 制御は Mozc でやることにして iBus を使い続けることにしました。

現状では IME 状態のインジケーターが無いので不便という話もありますが、 半角/全角 みたいな状態トグルキーを使わず、 IME on のキーと IME off のキーを個別に設定して使うことができれば特に困りません。 iBus 1.4 までは iBus でそのように設定していたのを Mozc で行うことにします。

Mozc の設定を出すには端末から ibus-setup コマンドを実行してください。自分は英語配列キーボードを使っており 変換無変換 といった余分なキーがないので、こういう設定にして使っています。

ただし。直接入力時の Ctrl-' は mozc に無視されてしまうらしく、文字 ' がそのまま入力されてしまうことがわかりました。 Windows の Google 日本語入力 ではそういうことは起きないので、この設定で Ctrl-;Ctrl-' を好きなだけ叩いても問題なく快適に使えるのですが。

そこで Xorg でも Ctrl-'' が入力されないようにする方法を求めて Xkb などをかなり深追いしてしまったのですが、その結果判明したのは X11 において Control モディファイヤキーで出る文字は libX11 の XkbToControl() という関数にハードコードされており変更不可能らしいということでした。

/src/xkb/XKBBind.c

char
XkbToControl( char ch )
{
    register char c = ch;

    if ((c >= '@' && c < '\177') || c == ' ') c &= 0x1F;
    else if (c == '2') c = '\000';
    else if (c >= '3' && c <= '7') c -= ('3' - '\033');
    else if (c == '8') c = '\177';
    else if (c == '/') c = '_' & 0x1F;
    return c;
}

この関数は XkbTranslateKeySym()XLookupString() の内部で使われており、 xev コマンドなどで動作を確認できます。興味深いのは、単に文字コードに 0×1F を AND するだけでなく、一部の数字では特殊な制御文字が出るようにしていることです。

キー 入力コード 16進
Ctrl-2 ^@ 00
Ctrl-3 ^[ 1B
Ctrl-4 ^\ 1C
Ctrl-5 ^] 1D
Ctrl-6 ^^ 1E
Ctrl-7 ^_ 1F
Ctrl-8 DEL 7F
Ctrl-/ ^_ 1F

ついでに昔の X も調べてみたところ X11R3 の時点でこのコードが登場しています。 SunOS を使ってた頃から X でも kterm でも Emacs は Ctrl-2 だけで mark set できて Ctrl-/ で undo できていたのは、このコードのおかげだったようです。

それにしても X サーバ側の XKB とか XINPUT とかはあんなに複雑でわけわかめなのに、こんな単純なことも設定できなかったとは、ちょっと意外でした。結局 Ctrl-'' が入力されてしまう問題はまだ解決できておらず iBus 1.5 でちょっと困っています。

fglrx 13.101 の HDMI 出力で困った

AMD GPU のプロプラエタリドライバも更新され、 fglrxfglrx-updates が共に 13.101 (Catalyst 13.6 beta2 相当?) となりました。

自分は RADEON HD 6450 に DELL U2713HHDMI 接続して使っています。 以前まとめた記事 に引き続きまた HDMI かという感じですが、この構成でやっぱりトラブルがありました。

まず HDMI 出力が額縁で色もおかしいという問題ですが、これはスーパーユーザで Catalyst Control Center (amdcccle コマンド) を起動してディスプレイ (DTV) のピクセル形式を YCbCr から RGB に、スケーリングオプションを 0% (オーバースキャン) にすれば、これまでどおりの発色のドットバイドット表示となります。

これは Windows では昔からある問題で、それが Linux にもやってきた感じです。なお amdcccleamdconfig コマンドの設定はシステムワイドな設定としてテキストファイル /etc/X11/xorg.conf/etc/ati/amdpcsdb に保存されます。

予想外だったのは Ubuntu 13.04 (raring) まででは問題なくできていた HDMIWQHD (2560×1440) 出力ができなくなっていることです。 raring 向けドライバ fglrx-updates 9.012 (Catalyst 13.1) の deb を無理矢理インストールして試すと正しく動くので、新しいバージョンで何かが変わったと思われます。ちなみに現時点の最新ベータドライバ 13.25.18 (Catalyst 13.11 beta 6) でも同じでした。

Xorg.0.log によれば EDID では 2560×1440 60Hz が正常に取得できているのですが、利用可能なタイミングとしては 1920×1080 60Hz までに制限されているようです。 xorg.confxrandr などで 2560×1440 60Hz を手動設定しようとしてもログに次のように出て失敗します。

[ 30475.728] (EE) fglrx(0): Add Customize Mode failed: 7

以前の記事 で紹介した Intel GPU 向けにドットクロックを落としたタイミング 2560×1440 55Hz は設定可能でした。 同記事でコメントをいただいた ひまお さんが遭遇した状況に似ています。

他にもいろいろ試したところドットクロックが 225MHz を超えると駄目なようで、どうやらここにリミットがかけられているようです。

# OK: dot clock 220.812MHz
$ xrandr --newmode "2560x1440@55" 220.812 2560 2608 2640 2720 1440 1443 1448 1478 -hsync -vsync
$ xrandr --output DFP1 --mode 2560x1440@55

# OK: dot clock 224.832MHz
$ xrandr --newmode "2560x1440@56" 224.832 2560 2608 2640 2720 1440 1443 1448 1478 -hsync -vsync
$ xrandr --output DFP1 --mode 2560x1440@56

# NG: dot clock 228.852MHz
$ xrandr --newmode "2560x1440@57" 228.852 2560 2608 2640 2720 1440 1443 1448 1478 -hsync -vsync
$ xrandr --output DFP1 --mode 2560x1440@57

おそらくドライバが基板上の HDMI PHY の種類かなにかを見てリミットをかけているのではないかと思います。なんとかこれを回避できる設定はないかと探しているのですが、今のところ見つかっていません。それにしても fglrx は nvidia と比較してマニュアルもないし設定項目も少ないしエラーメッセージは出さないし各バージョンの web のパーマリンクもないしで、使いにくいですね。

なお Windows のドライバでも同様な制限があるらしく、 ドライバにバイナリパッチをあてる Pixel Clock Patcher というツールが出回っているようです。 Linux の fglrx でも同じようなことをする必要があるかもしれません。

まとめ

ということで Ubuntu Desktop の 13.10 へのアップグレードは終了しました。些細な問題がいくつかあって、その調査に猛烈に時間をかけてしまいました。

それ以外のトラブルはなくまあ優秀だと思いますが、デスクトップ環境としての完成度は、 13.04 から後退してないにしても足踏み状態かなあという感想です。 14.04 LTS では状況が改善することを願っています。

2013/11/17 11:14:00 JST