追記
Chromeの更新通知が来たので、期待しながら更新すると、アンダーバーの入力ができるように治ってました!
元記事は残しておきます。以下元記事です。
Linux(Ubuntu)とWindowsを使っているのですが、キーボード・マウス・モニターを切り替えるのが面倒なので、 Ubuntuには、Windows PCからリモートデスクトップでアクセスして使っています。
キーボードは、Windows PCの日本語キーボードを使っていて、これまで特に問題なく入力できていました。
ちなみに、リモートデスクトップでアクセスできるUbuntu環境の構築はこちら。
アンダーバーが入力できなくなった
いつのタイミングからか分からないのですが、気づいたら「/?」キーの右の「_」(バックスラッシュ・アンダーバー)キーの入力ができなくなっていました。
解決方法
下記の記事をもとに、キーボードレイアウトを設定し直すと直りました。
- 新しく日本語キーボードレイアウトを追加
- 古い日本語キーボードレイアウトを削除
- 再起動
以下、ざっくり手順になります。デスクトップ環境は「MATE」を使っていますが、他の環境でも似たような手順になるかと思います。
新しく日本語キーボードレイアウトを追加
- [メニュー]-[設定]-[キーボード]
- [レイアウト]-[追加]で日本語レイアウトを追加
- 「キーボードの形式」は「Generic 105-key PC(intl.)」にします
古い日本語キーボードレイアウトを削除
日本語レイアウトが2つになるので、古い上のレイアウトを削除します。
- [Remove]
後はPCを再起動すれば、ターミナル等でアンダーバーが入力できるようになります。
Chromeでアンダーバーが入力できない
「ターミナル等」と書いたのには訳があって、どうやってもChromeでアンダーバーキーでの入力ができないのです…。
他のメジャー所のアプリでも試してみると、「ターミナル」「FireFox」「Chromium」「VSCode」「Vim」「Emacs」全て大丈夫でしたが、やっぱりChromeだけダメでした…。
Chromiumは大丈夫なのにChromeはダメとか、Chrome固有の問題に思えてきました。
調べてみると下記の記事があり、それによると、どうやらChromeは独自でキー実装しているようです。
確かに英語キーボードだと、日本語キーボードのアンダーバーキーに該当するキーが無いので、実装されていないという可能性はありえそうです…。
解決方法
普段Chromeは頻繁に使っているので、使わないという選択肢は無く、とはいえ、アンダーバーが入力できないのは辛いので、苦肉の策として、アンダーバーキーの下にある「メニューキー」に、アンダーバーキーと同じキー割り当てをすることにしました。
キー割り当て変更方法は、下記記事を参考にしました。とても分かりやすかったです。
詳細は記事を見て頂くとして、ここでは、今回やった手順をざっくりと記載します。
キー割当手順
キーボードでは、キーを物理的に区別するために、キー毎に「keycode」が決まってます。
そのkeycodeに対して、何を行うかを設定することにより、キー割り当てを行います。
keycodeを調べる
keycodeを調べるコマンドxev
を実行した後、「アンダーバーキー」と「メニューキー」を押して、keycodeを調べます。
表示される「keycode ~」が、押したキーのkeycodeです。
> xev KeyPress event, serial 35, synthetic NO, window 0x4200001, root 0x29a, subw 0x0, time 7935771, (510,374), root:(518,453), state 0x0, keycode 211 (keysym 0x5c, backslash), same_screen YES, XKeysymToKeycode returns keycode: 117 XLookupString gives 1 bytes: (5c) "\" XmbLookupString gives 1 bytes: (5c) "\" XFilterEvent returns: False KeyPress event, serial 38, synthetic NO, window 0x4200001, root 0x29a, subw 0x0, time 8143473, (341,-8), root:(349,71), state 0x0, keycode 117 (keysym 0xff67, Menu), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False
- アンダーバーキー
- 「keycode 211」
- メニューキー
- 「keycode 117」
現在の設定を調べる
「アンダーバーキー」「メニューキー」の、現在の設定を調べます。
> xmodmap -pke … keycode 117 = Menu NoSymbol Menu … keycode 211 = backslash underscore backslash underscore …
- アンダーバーキー
- 「backslash underscore backslash underscore」
- メニューキー
- 「Menu NoSymbol Menu」
設定ファイルを作成
「メニューキー」の割り当てを、「アンダーバーキー」と同じ割り当てにする設定ファイル「.Xmodmap」を作成します。
「.Xmodmap」は、ホームディレクトリに置きます。
.Xmodmap
keycode 117 = backslash underscore backslash underscore
後は、設定ファイルを反映しておしまいです。
> xmodmap ~/.Xmodmap
テスト
Chromeで「メニューキー」を押してみます。
うまくいきました!
PC起動時に設定ファイルが自動で読み込まれるので、都度設定し直す必要はありません。
感想など
あまり使い勝手は良くないのですが、とりあえずこれで良しとします。
実際のところ原因は何でしょうね。そのうち直るといいんですけどね。
コンピューター・インターネットにおける日本の存在感が、空気になりつつあるこのご時世、仮に日本語キーボードへの対応実装漏れだったとしたら、優先度低いんだろうなぁ…。
Office365のフォントが中国語の漢字だったり、使いたいと思ったAIの言語APIが日本語非対応だったり、日本が後回しにされているなぁと感じることが、ちょいちょいあって寂しい今日このごろです…。