一般ユーザーで起動したX(monad)上のuimで仮名変換できない
症状
uim-pref-gtkで設定でき,urxvt上の端末にuim-input-pad-jaからであれば仮名を入力できます.キーボードから入力した文字列に変換を予期する下線を伴うか否かを半角/全角キーで切り替えられるので機能しているようですが,ローマ字打ちで仮名を入力できません.キーボードからローマ字打ちで仮名を入力できないので当然ながら漢字変換するに至れません.キーボードから入力した文字列を仮名変換できるよう環境を治すことが質問の目標です. Windows10のMicrosoft IMEによるローマ字打ち日本語入力と同じような挙動をまたuimに機能させることを質問の目標とします.
留意
元々は一般ユーザーでXを起動できなくなり,手探りでまた起動を可能に修復したら新しく発生した問題です(ゆえに次項から,X準備から症状に至った流れとして問題を説明します.症状に的外れな説明である可能性があります).依然としてXの挙動が不安定であるために,私は素朴にX周りの設定に原因の存在を予想しています.一般ユーザーでXを起動するために最初に試して挫折した対症療法であるsystemd/ユーザー > systemd のユーザーサービスとしての Xorg > 2. ~ 4.で書き残した起動失敗するsystemdユーザーユニットや設定ファイルが邪魔している可能性もあります.uim側の設定を症状に合わせるように何か変更するだけで質問の目標を達成する可能性もあります.X,uim(,systemdなど)について回答やコメントを広く募集します.
目につく限りのエラー出力ログを Googleで検索して調べ回答済み質問を参照し対症療法としてきたので,問題の切り分けが不十分です.新規ユーザーの制限により,ハイパーリンクを二件までしか質問文に貼れません.次項からの流れでは主にArchWikiの該当ページを参照し実行しました.環境はThinkPad X220のmSATA SSDにインストールしたArch Linuxです.エラー出力ログや参照したハイパーリンクの情報が回答に必要だと私または回答コメント者が判断した場合は,質問文を編集して追記またはコメントにて補足します.
Xを準備
以前から一般ユーザーにXを起動する許可を与える設定ファイルを作成していました.
/etc/X11/Xwrapper.config
allowed_users=anybody
needs_root_rights=yes
Xを描画するビデオカードのドライバー等を準備するために,
搭載されているビデオカードを特定し,
$ lspci | grep -e VGA -e 3D
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
ビデオカードに該当しそうなドライバーを,念のため全てインストールしました.
$ sudo pacman -S xf86-video-fbdev xf86-video-vesa xf86-video-intel
よく分かりませんがArchWikiの指示通り設定ファイルを作成しました.
$ sudo vim /etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "sna"
EndSection
Xを起動
Xを起動しようとしました.
$ xinit
略
Fatal server error:
(EE) parse_vt_settings: Cannot open /dev/tty0 (Permission denied)
略
原因は分かりませんが,$ xinit
は失敗します.sudo権限をつけると成功しますが,$ whoami
が一般ユーザーからrootに切り替わってしまうことが二回に一回くらいの頻度で発生します.以前はsudo権限なしでも一般ユーザーで$ xinit
できていたのですが,ある日いつものように$ yaourt -Syua
で更新をかけると$ xinit
できなくなってしまいました.以前から既に/etc/X11/Xwrapper.config
を設定済みでした.必要なパッケージを気付かず削除してしまったのかもしれませんが,どのパッケージを削除したのか覚えていません.xf86-video-hogeだった気もするのですが,前項のようにインストールしても$ xinit
は成功しません.
$ startx
は(sudo権限なしでも)何故か成功でき,元々に解決しようとしていた一般ユーザーによるX起動が実現できました(そして質問の目標であるuimによる仮名変換ができない問題が新しく発生したわけです)(xmonad起動した状態からのシャットダウンはできますが,ログアウトしようとすると二回に一回くらいの頻度でフリーズしてしまい強制終了する必要があるのですが,質問の目標とは別の話です).
Xを自動起動
以前から.zprofile
を設定してログインするとXが自動起動するようにしていました.何故か$ xinit
できないけど$ startx
できるので書き換えました.
.zprofile
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then
exec startx
fi
環境変数を設定
対症療法で試行錯誤した私の経験によると,環境変数は問題に大きく関わると予想します.DISPLAY
とXDG_VTNR
などが何を設定する環境変数であるか,私の理解は不十分です.
以前は.xinitrc
のuimが起動するuim-xim &
付近にuimの環境変数を記述していましたが,.xprofile
に移動しても問題の症状に変化はありませんでした.
.xprofile
export GTK_IM_MODULE='uim'
export QT_IM_MODULE='uim'
export XMODIFIERS='@im=uim'
以前は.zshenv
にexport DISPLAY=:0
と記述していましたが.zprofile
設置によるX自動起動を邪魔するようだったので記述を消しました.
.zshenv
export SDL_VIDEO_X11_DGAMOUSE=0
など
uimを起動
Xを起動させる際にuimなどをスタートアップとして付随起動させます.
.xinitrc
#!/bin/sh
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f "$userresources" ]; then
xrdb -merge "$userresources"
fi
if [ -f "$usermodmap" ]; then
xmodmap "$usermodmap"
fi
# start some nice programs
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
for f in /etc/X11/xinit/xinitrc.d/?* ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
[[ -f $userresources ]] && xrdb -merge -I $HOME $userresources
xsetroot -cursor_name left_ptr
setxkbmap -layout jp
test -r $usermodmap && xmodmap $usermodmap
uim-xim &
dunst &
urxvtd --quiet --fork --opendisplay
exec xmonad
#end
デスクトップ画面であるxmonadが起動し,初項画像の症状に至ります.回答やコメントをお願い致します.
追記1
設置して起動していた余計なsystemd user unitsを停止させると,因果関係は不明ですが,sudo権限なしでxinit
も成功できるようになっていました.一般ユーザーでXやuimを自動起動する一手段であるsystemd user unitsは,目的を同じくする.zprofile
による一手段と競合するだけのようです.この質問では第ニ項で言及したsystemdの内容を無視して良いと思われます.
一般ユーザーでsudo権限ありの $ xinit
または$ startx
によりXを起動し.xinitrc
でuimやxmonadを付随起動させた場合,$ whoami
で確認するとrootに切り替えてxmonadを起動させる ようで,uimによるローマ字入力が可能であることに気付きました.また,CUIで$ sudo xinit
し,xmonad上で$ su username
してrootから一般ユーザーに切り替えると,質問の症状を迂回して回避できることに気付きました.とは言え直接に質問の目標を達成したいです.権限がないことが問題の一因かもしれません.
追記2
uimの挙動に影響している憶測を私が捨てきれない,未解決のX誤動作kernel error in drm_kms_helper, flip_done timed outがあり,X serverを停止させようとするとLinux全体の挙動が極度に遅くなったりフリーズすることがあります.ThinkPad X220使い二名がxf86-video-intelをアンインストールし解決したと投稿していますが,xf86-video-intelがないと$ xinit
できませんでした.xf86-video-vesa("generic KMS driver"?)とxf86-video-fbdevは不要そうなのでアンインストールしました.kernel parameterにvideo=SVIDEO-1:d
加えることで解決するとも投稿されているので,BootloaderにはGRUB2を採用しているはずなので/etc/default/grub
にGRUB_CMDLINE_LINUX_DEFAULT="quiet video=SVIDEO-1:d"
のように含め,grub-mkconfig -o /boot/grub/grub.cfg
して設定を永続して反映させるはずですが,試しても何故か永続しません.GRUBメニューが表示されたらeを押しパラメータをlinux行の後ろに加えることで一時的に反映されることはできました.しかし現段階では,この方法を含むIntel Graphicsに書かれた方法を試行錯誤して,未解決のX誤動作を安定させられたことも,uimの症状が治ったこともありません.$ chromium &
が"Your Preferences can not read."と表示する窓を伴いinitializesandbox() called with multiple threads in process gpu-process.
などのエラー文を出し動作が現在は不安定であることから,「uimの挙動は未解決のX誤動作により日本語文字の描画を阻害された結果である」と憶測できなくもありません.
追記2に追記:$ grub-mkconfig -o /boot/grub/grub.cfg
ではなく$ grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg
でboot時のGRUB2 > e画面でboot parameterのLinux行にvideo=SVIDEO-1:d
設定が永続反映できたことを確認しました.しかしXと,その上のuimとchromiumの症状に変化ありませんでした.