試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

KDE4上の自動起動とSCIMについて

(2010/6/9)この記事の内容は非常に古くなってしまったので、「KDE4の自動実行スクリプトの設定と場所について(バージョン4.3.2時点)
」を参照。

以下、以前の内容となる。
特にKDE4だけが独自の自動起動の仕組みを持っているというわけではないのだが、GNOMEやXfce4と扱いの異なる部分もあったため、まとめておくことに。GTK+ 2の設定とも多少絡むため、前回の記事の追記的な部分もある。

  1. 自動起動の仕組み
  2. GTK+ 2に関する設定と自動起動スクリプト
  3. SCIMの自動起動に関する覚え書き
  4. SCIMのXIMはQt4のSCIM-Bridge immoduleが入っているときのみ動かない?

自動起動の仕組み

GNOMEとXfce4では、.desktop形式のファイルを[ホームディレクトリ]/.config/autostart/以下に配置することで自動的にこれらの項目が実行されるようになっている。
KDE4では、バージョン4.0.1の時点では[ホームディレクトリ]/.config/autostart/以下の.desktopファイルは使用されていない。
(2008/3/3)[ホームディレクトリ]/.config/autostart/に対するリンク[ホームディレクトリ]/.kde/share/autostartを作成することで、その中の.desktopファイルが使用されるようになった。

$ cd ~/.kde/share/
$ ln -s ../../.config/autostart/ .

を実行することで、[ホームディレクトリ]/.config/autostart/以下の.desktopファイルが使用できるようになった。
参考URL:


使用されていることが確認できたのは[ホームディレクトリ]/.kde/Autostart/以下の実行可能ファイルなので、自動起動用のシェルスクリプトをここに配置して実行属性を付けておくことになる。スクリプトの実体は別の場所([ホームディレクトリ]/bin/など)に配置して、このディレクトリの中にリンクを作成しておくのがよさそう。
また、グラフィカルログインをした場合、[ホームディレクトリ]/.xprofileも使用される(GDMKDMで確認)。これらの処理される順番については後述。

GTK+ 2に関する設定と自動起動スクリプト

KDE4上のGTK+ 2の設定について」に書いた設定のままでは、自動起動スクリプト内にGTK+ 2アプリケーションを指定すると、そのアプリケーションに対してはスタイルなどの設定が適用されなかった。直接GTK+ 2アプリケーションを指定しなくても、子プロセスとして起動したものは設定が適用されない(例:QjackCtl自動起動した場合、そこから起動されるGLASHCtlのスタイルは既定のスタイルになる)。
この問題に対処するには、自動起動スクリプトKDE用には分けずに他のデスクトップ環境と共用し、更にその中で、下のようにしてKDE上でのみ一時的にGTK2_RC_FILES変数を指定する形にする。
[ホームディレクトリ]/.gtkrc-2.0をコピーしているのは「KDE4上のGTK+ 2の設定について」に書いているように、非KDEアプリに配色を適用しない設定であっても、KDEによって[ホームディレクトリ]/.kde/share/config/gtkrc-2.0が上書きされてしまうため。
[任意]ファイル名: ~/bin/startup.sh

#! /bin/sh

if ps -U $(whoami) | grep kdeinit >/dev/null; then
  cp ~/.gtkrc-2.0 ~/.kde/share/config/gtkrc-2.0 -f
  GTK2_RC_FILES=~/.kde/share/config/gtkrc-2.0
fi

# (この下にデスクトップ環境共通の自動起動アプリケーションのコマンド名を記述)

実際には

  • ログアウト後にknotify4が動作し続けることがあって、JACK Audio Connection Kitが開始できないことがあったため、念のためkillallしておく
  • /etc/xdg/autostart/以下の.desktopファイルの自動起動が機能していない*1ため、手動でコマンド記述

といったこともあるので、下のような形になる。
[任意]ファイル名: ~/bin/startup.sh

#! /bin/sh

if ps -U $(whoami) | grep kdeinit >/dev/null; then
  (sleep 5; killall knotify4) &

  cp ~/.gtkrc-2.0 ~/.kde/share/config/gtkrc-2.0 -f
  GTK2_RC_FILES=~/.kde/share/config/gtkrc-2.0

  mail-notification &
  beagle-search --icon &
  # (その他/etc/xdg/autostart/以下の.desktopファイルが起動するコマンド名を追加)
fi

# (この下にデスクトップ環境共通の自動起動アプリケーションのコマンド名を記述)

(2008/3/3)[ホームディレクトリ]/.config/autostart/に対するリンク[ホームディレクトリ]/.kde/share/autostartを作成したら、knotify4の終了の部分によってなぜか自動起動処理が止まってしまい、うまく動作しなかったため、記述を微調整した

SCIM自動起動に関する覚え書き

scim -d」を[ホームディレクトリ]/.kde/Autostart/以下のスクリプトに記述しても、XIMとして正常に動作しなかった。原因はよく分からない。[ホームディレクトリ]/.xprofileに記述した場合、GDM経由で正常動作、KDM経由で失敗した。
自動起動は(GDM使用時限定?)うまくいったものの、SCIMのシステムトレイのスタイルが既定のものになってしまうため、KDEのときのみ分岐させて[ホームディレクトリ]/.gtkrc-2.0が使用されるようにする必要があった。更に、OpenOffice.orgのデスクトップ統合がKDE4に対応していないため、代わりにGTK+ 2を使用するための指定もしている。
ファイル名: ~/.xprofile

#! /bin/sh

# (ここに環境変数の指定などを記述する)

_KDE_SESSION_NAME="kde-4"
if [ ${DESKTOP_SESSION} == ${_KDE_SESSION_NAME} ]; then
  GTK2_RC_FILES=~/.gtkrc-2.0
  export OOO_FORCE_DESKTOP=gnome
else
  export GTK2_RC_FILES=
fi
scim -d

kde-4」の部分はディストリによって異なる可能性がある(KDE4上で環境変数DESKTOP_SESSIONの値を取得してここに使用する)。
KDE以外のときにGTK2_RC_FILESを空文字列にしてexportしているのは、GNOMEやXfce4でGTK+ 2の設定が反映されなくなるのを防ぐため。
(2009/1/2)Mandriva Linux 2009.0ではKDE4上の環境変数DESKTOP_SESSIONは(「kde-4」ではなく)「01KDE4」になった。このあたりはディストリによって変わってくるかもしれない。

なお、参考までに、グラフィカルログイン後の起動処理の流れは

  1. ディスプレイマネージャ(GDMなど)でユーザ名とパスワードによる認証を行う
  2. [ホームディレクトリ]/.xprofileが読まれ、実行される
  3. KDE4の各種初期化処理が開始される
  4. [ホームディレクトリ]/.kde/Autostart/以下の実行ファイルが実行される

の順番になっている。

SCIMのXIMはQt4のSCIM-Bridge immoduleが入っているときのみ動かない?

  • GDM経由では、KDEの初期化前に起動した場合のみ動作する
  • KDM経由では動作しない

あたりから、Qt4向けのSCIM-Bridge immoduleが怪しいのではないかと思い、SCIM-Bridgeを試しに消してみたところ、[ホームディレクトリ]/.kde/Autostart/以下のスクリプトに「scim -d」を記述しても、KDMでログインしても、SCIMは正常に動作するようになった。しかし、インストールされていると、[ホームディレクトリ]/.xprofileで起動しないとダメだった。

使用したバージョン:

*1:/usr/kde/4.0/share/autostart/以下のKDE関係の.desktopファイルは使用されているようなのだが...