LoginSignup
1
0

More than 3 years have passed since last update.

RealforceがLinuxで認識しなかった時の対処法

Last updated at Posted at 2019-08-27

症状

  • 東プレ製のキーボード"Realforce"を筐体に挿しても、Ubuntu上でキーが反応しない
    • BIOSやgrubブートメニューではキーが反応する

環境

Name Description
キーボード Realforce104UB-S
PC筐体 DELL OptiPlex 7060
OS Ubuntu 16.04.6 LTS (xenial)
Kernel 4.15.0

dmesg

  • dmesgを叩くと次のようなエラーが出ている
$ dmesg
〜中略〜
[  126.722472] usb 1-1: new full-speed USB device number 5 using xhci_hcd
[  126.872029] usb 1-1: unable to read config index 0 descriptor/start: -32
[  126.872047] usb 1-1: chopping to 0 config(s)
[  126.872958] usb 1-1: New USB device found, idVendor=0853, idProduct=011b
[  126.872963] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  126.872967] usb 1-1: Product: Realforce
[  126.872970] usb 1-1: Manufacturer: Topre Corporation
[  126.873214] usb 1-1: no configuration chosen from 0 choices

有効だった解決法

自分でカーネルにパッチを当てる

手順

必要なライブラリをインストール

$ sudo apt install -y git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache

カーネルのソースコードを取得

  • 僕の環境では4.15.0だったので対応するもの(4.15.y)を利用
    • バージョン名は適宜読み変えてください
$ cd ~
$ mkdir -p kernel-build
$ cd kernel-build
$ git clone -b linux-4.15.y git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
$ cd linux-stable

USBに関するソースコードの書き換え

  • drivers/usb/core/quirks.cに定義されているusb_quirk_listに、利用したいキーボードに関するエントリを追加する
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 54b019e..060c47a 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -256,6 +256,10 @@ static const struct usb_device_id usb_quirk_list[] = {
    /* INTEL VALUE SSD */
    { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },

+   /* Realforce104UB-S */
+   { USB_DEVICE(0x0853, 0x011b), .driver_info = USB_QUIRK_DELAY_INIT |
+ USB_QUIRK_NO_LPM | USB_QUIRK_DEVICE_QUALIFIER },
+
    { }  /* terminating entry must be last */
 };
  • USB_DEVICE(0x0853, 0x011b)のところは、それぞれVendorIDとProductIDを入れる
    • VendorIDとProductIDは、dmesglsusbで確認できる

カーネルのビルド

  • 先に、現在使っているカーネルの設定を引き継ぐ
$ cp /boot/config-$(uname -r) ./.config
$ yes '' | make oldconfig
  • ビルド(大体1時間くらいかかる)
    • LOCALVERSIONはsuffixの指定なので、好きなように変える
    • 例だとバージョン表記が4.15.18-kbdfixとなる
$ sudo make -j $(getconf _NPROCESSORS_ONLN) deb-pkg LOCALVERSION=-kbdfix
  • ビルドが完了したらパッケージをインストール
$ cd ..
$ sudo dpkg -i linux-libc-dev_4.15.18-kbdfix-1_amd64.deb
$ sudo dpkg -i linux-headers-4.15.18-kbdfix_4.15.18-custom-1_amd64.deb
$ sudo dpkg -i linux-image-4.15.18-kbdfix-dbg_4.15.18-kbdfix-1_amd64.deb
$ sudo dpkg -i linux-image-4.15.18-kbdfix_4.15.18-kbdfix-1_amd64.deb
  • 再起動してuname -rで新しいバージョンになっていればインストール完了
  • 僕の場合は問題なく反応するようになった

参考

試したがダメだった解決法

xserver-xorg-input-allのインストール

$ sudo apt-get install xserver-xorg-input-all

カーネルバージョンの更新

$ sudo apt install linux-generic-hwe-16.04
  • 16.04用に提供されている中で最新のカーネルへ更新
    • 4.15.0-15から4.15.0-47に更新された
  • 再起動してキーボードをUSB3.0のポートに繋ぎ直すと一時的にキーボードが反応するように
  • しかしポートを再び繋ぎ変えると、それ以降また反応しなくなった
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0