新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Linuxでアンダーバーが入力できなくなった

2020-02-20 追記

Chromeの更新通知が来たので、期待しながら更新すると、アンダーバーの入力ができるように治ってました!

元記事は残しておきます。以下元記事です。


Linux(Ubuntu)とWindowsを使っているのですが、キーボード・マウス・モニターを切り替えるのが面倒なので、 Ubuntuには、Windows PCからリモートデスクトップでアクセスして使っています。

キーボードは、Windows PCの日本語キーボードを使っていて、これまで特に問題なく入力できていました。

ちなみに、リモートデスクトップでアクセスできるUbuntu環境の構築はこちら。

www.kwbtblog.com

アンダーバーが入力できなくなった

いつのタイミングからか分からないのですが、気づいたら「/?」キーの右の「_」(バックスラッシュ・アンダーバー)キーの入力ができなくなっていました。

解決方法

下記の記事をもとに、キーボードレイアウトを設定し直すと直りました。

forums.ubuntulinux.jp

  1. 新しく日本語キーボードレイアウトを追加
  2. 古い日本語キーボードレイアウトを削除
  3. 再起動

以下、ざっくり手順になります。デスクトップ環境は「MATE」を使っていますが、他の環境でも似たような手順になるかと思います。

新しく日本語キーボードレイアウトを追加

  • [メニュー]-[設定]-[キーボード]

Linuxでアンダーバーが入力できなくなった

  • [レイアウト]-[追加]で日本語レイアウトを追加

Linuxでアンダーバーが入力できなくなった

  • 「キーボードの形式」は「Generic 105-key PC(intl.)」にします

Linuxでアンダーバーが入力できなくなった

古い日本語キーボードレイアウトを削除

日本語レイアウトが2つになるので、古い上のレイアウトを削除します。

  • [Remove]

Linuxでアンダーバーが入力できなくなった

後はPCを再起動すれば、ターミナルでアンダーバーが入力できるようになります。

Chromeでアンダーバーが入力できない

ターミナルと書いたのには訳があって、どうやってもChromeでアンダーバーキーでの入力ができないのです…。

他のメジャー所のアプリでも試してみると、「ターミナル」「FireFox」「Chromium」「VSCode」「Vim」「Emacs」全て大丈夫でしたが、やっぱりChromeだけダメでした…。

Chromiumは大丈夫なのにChromeはダメとか、Chrome固有の問題に思えてきました。

調べてみると下記の記事があり、それによると、どうやらChromeは独自でキー実装しているようです。

askubuntu.com

確かに英語キーボードだと、日本語キーボードのアンダーバーキーに該当するキーが無いので、実装されていないという可能性はありえそうです…。

解決方法

普段Chromeは頻繁に使っているので、使わないという選択肢は無く、とはいえ、アンダーバーが入力できないのは辛いので、苦肉の策として、アンダーバーキーの下にある「メニューキー」に、アンダーバーキーと同じキー割り当てをすることにしました。

キー割り当て変更方法は、下記記事を参考にしました。とても分かりやすかったです。

bearmini.hatenablog.com

詳細は記事を見て頂くとして、ここでは、今回やった手順をざっくりと記載します。

キー割当手順

キーボードでは、キーを物理的に区別するために、キー毎に「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で「メニューキー」を押してみます。

Linuxでアンダーバーが入力できなくなった

うまくいきました!

PC起動時に設定ファイルが自動で読み込まれるので、都度設定し直す必要はありません。

感想など

あまり使い勝手は良くないのですが、とりあえずこれで良しとします。

実際のところ原因は何でしょうね。そのうち直るといいんですけどね。

コンピューター・インターネットにおける日本の存在感が、空気になりつつあるこのご時世、仮に日本語キーボードへの対応実装漏れだったとしたら、優先度低いんだろうなぁ…。

Office365のフォントが中国語の漢字だったり、使いたいと思ったAIの言語APIが日本語非対応だったり、日本が後回しにされているなぁと感じることが、ちょいちょいあって寂しい今日このごろです…。