表題の件について力技で何とか出来たので、メモ書き。
背景
発生した問題
- 相手がWindowsということで、RDP接続で済ませようと思ったが問題発生。
- ubuntu に初期インストールされていた XfreeRDP や Remmina を使って接続すると、キーボードが英語キーボードとして認識される現象が100%の確率で起こる状態になっていた。
- 例えば、半角/全角を押すと ` が出たり、" を押すと @が出たり…。
回避方法
- 下記のページを見ると、xfreerdpについては、git に上がってるソースからビルドすれば問題起きないと書いていた。
【なんとなく】
- 上記を参考にいろいろ試したところ、Remmina 含めてキーボードがちゃんと認識されるようになった。
- 対応手順を以下に殴り書き。
※作業ディレクトリを /home/hoge とする。
1. XfreeRD をソースからビルド
(1) ソースの入手
# cd /home/hoge
# git clone git://github.com/FreeRDP/FreeRDP.git
# cd FreeRDP
(2) 関連モジュールのインストール
# sudo apt-get install build-essential git-core cmake libssl-dev libx11-dev libxext-dev libxinerama-dev libxcursor-dev libxdamage-dev libxv-dev libxkbfile-dev libasound2-dev libcups2-dev libxml2 libxml2-dev libxrandr-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
※パッケージ情報のネタ元
https://github.com/FreeRDP/FreeRDP/wiki/Compilation#linux-specifics
(3) ビルド&インストール
# cmake .
# make
# make install
2. XfreeRDPのモジュールを配置
以下のファイルは手動でコピーする必要がありそう。
(1) libfreerdp-core.so
# cp -pi /home/hoge/FreeRDP/libfreerdp/core/libfreerdp-core.so.1.2.0 /usr/local/lib/libfreerdp-core.so.1.2.0
# ln -s /usr/local/lib/libfreerdp-core.so.1.2.0 /usr/local/lib/libfreerdp-core.so.1.2
# ln -s /usr/local/lib/libfreerdp-core.so.1.2.0 /usr/local/lib/libfreerdp-core.so
(2) libfreerdp-gdi.so
# cp -pi /home/hoge/FreeRDP/libfreerdp/gdi/libfreerdp-gdi.so.1.2.0 /usr/local/lib/libfreerdp-gdi.so.1.2.0
# ln -s /usr/local/lib/libfreerdp-gdi.so.1.2.0 /usr/local/lib/libfreerdp-gdi.so.1.2
# ln -s /usr/local/lib/libfreerdp-gdi.so.1.2.0 /usr/local/lib/libfreerdp-gdi.so
(3) libfreerdp-locale.so
# cp -pi /home/hoge/FreeRDP/libfreerdp/locale/libfreerdp-locale.so.1.2.0 /usr/local/lib/libfreerdp-locale.so.1.2.0
# ln -s /usr/local/lib/libfreerdp-locale.so.1.2.0 /usr/local/lib/libfreerdp-locale.so.1.2
# ln -s /usr/local/lib/libfreerdp-locale.so.1.2.0 /usr/local/lib/libfreerdp-locale.so
(4) libfreerdp-codec.so
# cp -pi /home/hoge/FreeRDP/libfreerdp/codec/libfreerdp-codec.so.1.2.0 /usr/local/lib/libfreerdp-codec.so.1.2.0
# ln -s /usr/local/lib/libfreerdp-codec.so.1.2.0 /usr/local/lib/libfreerdp-codec.so.1.2
# ln -s /usr/local/lib/libfreerdp-codec.so.1.2.0 /usr/local/lib/libfreerdp-codec.so
(5) libfreerdp-client.so
# cp -pi /home/hoge/FreeRDP/client/common/libfreerdp-client.so.1.2.0 /usr/local/lib/libfreerdp-client.so.1.2.0
# ln -s /usr/local/lib/libfreerdp-client.so.1.2.0 /usr/local/lib/libfreerdp-client.so.1.2
# ln -s /usr/local/lib/libfreerdp-client.so.1.2.0 /usr/local/lib/libfreerdp-client.so
3. XfreeRDPのモジュールのパスを通す
(1) 定義ファイル作成
# vi /etc/ld.so.conf.d/xfreerdp.conf
-------- 以下のテキストを追加 --------
/usr/local/lib/libfreerdp-core.so.1.2
/usr/local/lib/libfreerdp-gdi.so.1.2
/usr/local/lib/libfreerdp-locale.so.1.2
/usr/local/lib/libfreerdp-codec.so.1.2
/usr/local/lib/libfreerdp-client.so.1.2
----------------------------------------
(2) 反映
# ldconfig
4. remmina をソースからビルド
(1) ソースの入手
# cd /home/hoge
# git clone git://github.com/FreeRDP/Remmina.git
# cd Remmina
(2) 関連モジュールのインストール
# sudo apt-get install "Remmina の READMEで指定されているモジュール全て"
(3) ビルド&インストール
# cmake .
# make
# make install
5. ubuntuをリブートする。
- 念のための対応。
6. RDP接続側のマシンにて、RDP接続に使用するユーザをログオフ状態にしておく。
- RDP接続時のキーマップはログオン時に決定される仕様らしい。
- このため、プリインストールされているReminnaでRDP接続した際のセッションが残っていると、該当ユーザのキーマップは英語キーボードのままとなる。
- というか、再起動したほうが確実。
7. 「/usr/local/bin/remmina」を起動し、キーボードが日本語キーボード(jp106キーボード)として認識されていることを確認する。