(Solaris)構築したSunRayサーバで変換,無変換キーなど一部のキーが効かない
Solaris10でSunRayサーバを一から構築したのですが、キオスクモードでWindowsターミナルサーバへ接続しているユーザーから、"無変換","変換"キーが効かないとの問い合わせがありました。 さらに、"カタカナひらがな"キーが変換キーを押下した時と同じ挙動になっているようです。
ベンダーが構築したSunRayサーバーはそんなこと無いので、違いを調査してみました。
まず、X Windows上で問題となっているキーを使ってみましたが、正常なサーバ、異常なサーバとも動きに差異はありませんでした。
Unixにはキーコード(keycode)とそれに対応する論理的な識別子(keysym)を設定できるところがあります。
以下コマンドで、両者の設定を比較してみました。
# xmodmap -pke
差分は以下の行だけでした。
・正常なサーバ
keycode 113 = Alt_R Alt_R
・問題発生のサーバ
keycode 113 = Alt_R Mode_switch
右Altキーだけの違いだけで、これが原因という感じでなさそうでした。
次に、"無変換","変換"キーを押下した時に、どんなkeycodeとkeysymが流れているのかを確認することにしました。xevを使うと、キー押下情報やマウス移動情報を取得できます。
X Window のコンソールでで以下のコマンドを実行します。
/usr/openwin/demo/xev
小さなウィンドウが立ち上がるので、そのウィンドウをアクティブにし、キーを押下します。
正常なサーバーでは以下のとおりでした。
無変換キー : keycode 146 , keysym 0xff62 Execute 変換キー : keycode 145 , keysym 0xff21, Kanji カタカナキー: keycode 143 , keysym 0xff7e Mode_switch
しかし、問題が発生しているサーバでは以下の結果となりました。
無変換キー : keycode 139 , keysym 0xff62 Execute 変換キー : keycode 138 , keysym 0xff21 Kanji カタカナキー: keycode 129 , keysym 0xff2d Kana_Lock
システムが捉えているkeycodeが異なります。
ということは、キーボードの物理設定あたりか?と思い、キーテーブルを見てみました。 差異があったので、以下のように変更してみました。
cd /usr/openwin/share/etc/keytables cp keytable.map keytable.map_bk20150406 vi keytable.map # # Type 6 Keyboards (USB Keyboards) # 6 0 US6.kt ↓ # # Type 6 Keyboards (USB Keyboards) # 6 0 Japan7.kt
で保存
cp xkbtable.map xkbtable.map_bk20150406 vi xkbtable.map # # Type 6 USB Keyboards # 6 * sun/all(US6_usb) type6_usb us ↓ # # Type 6 USB Keyboards # 6 * sun/all(Japan7_usb) type7_usb jp
で保存
これで再ログインしてみましたが、変化なしです。
ググっているとDocumentation Home > Solaris 10 ご使用にあたって > 付録 C 日本語環境に関する情報というページを見つけました。
どうやらバグのようです。
パッチが必要なようで、ダウンロード使用としましたが、Oralceとのサポート契約がきれており、ダウンロード出来ませんでした。
なので、上記ページに書いている回避策を実行しました。
rootユーザでログインします。
cd /
vi .dtprofile
末尾に以下のように追加しました。
# # Japanese 106 on Xorg # xmodmap -e "keycode 49 = Henkan_Mode" xmodmap -e "keycode 129 = Kana_Lock" xmodmap -e "keycode 138 = Kanji" xmodmap -e "keycode 139 = Execute" xmodmap -e "keycode 113 = Alt_R" # # Japanese 106 on Xsun # #xmodmap -e "keycode 60 = Henkan_Mode" #xmodmap -e "keycode 143 = Mode_switch" #xmodmap -e "keycode 145 = Kanji" #xmodmap -e "keycode 146 = Execute" #xmodmap -e "keycode 237 = Alt_R" #xmodmap -e "remove Mod2 = Alt_R" #xmodmap -e "add Mod2 = Mode_switch"
これでも現象改善されません。
途方に暮れていると、Using Sun Rays with non-standard keyboards (Think Thin)という記事を見つけました。 記事本文の内容は、上記で書いている keytable.map , xkbtable.map を変更する内容と同じです。 この記事のコメントに、以下の書き込みがありました。
going ahead in our kiosk problem we found that, after modifying the 2 files as you suggested, we need also to disable the XKB extension entering the following command: utxconfig -a -k off
どうやらキオスクモードでこのキーボード問題を解決するには、XKB拡張(X KeyBoard extension)を無効にする必要があるようです。
この設定をSunRayDTUに適用するには、コメントにあったように以下のコマンドを実行します。
# /opt/SUNWut/bin/utxconfig -a -k off
Xconfig record added/changed.
-aは全DTUに、-k off がXKB拡張無効を意味するようです。
この設定を適用してから後のセッションでWindowsConnectorを使ってターミナルサーバに説属すると 変換、無変換、カタカナひらがなキーが効くようになりました。 (ちなみに、keytable.map , xkbtable.mapへの変更や、/.dtprofileを直さなくても、XKB拡張を無効にするだけでうまくいきました)
参考:
uttsc WindowsConnectorの引数の説明。
4.1. Sun Ray Software コマンド
Sun Ray Server Software 4.1 リリースノート P9あたりに[キーボードの問題]として、utxconfig -k offの話が出ています。やはりバグ?
Lubuntuのキーボード配列設定:xmodmap あまり本題と関係無いですが、Linux環境におけるxmodmapやxkbの話。