これは書きかけのページです。 →少しずつ増えてきた 入力関連でトラブル多いが、だいぶまともに動くようになった。

{:TableOfContents}

キーボードが反応しないので対処

キーボードドックのキーボードが反応しない。dmesgにエラー表示があるとおり、 まともでないUSBデバイス情報を返すためらしい。 が、ありがたいことに、 簡単にビルドできる対策用カーネルモジュールが公開されている。 Simon Wörnerさんに感謝!

base-develとカーネルヘッダーをインストールpacman -S base-devel linux-headersしてから、下記に従ってモジュール hid-acer をコンパイルすれば、キーボードが使えるようになる。 githubのここ

$ git clone https://github.com/SWW13/hid-acer.git
$ cd hid-acer/
$ make
# make install

これだけ! その場では# modprobe hid-acerで、あと起動時やドック時には自動的にロードされる。

パッケージlinux(カーネル)やlinux-headersのアップデート後、再度 make & make install しなければならない点に注意。私は普段、この2つを自動アップデート禁止にしている。

Xでのタッチパッド(synaptics)

まずはsynapticsドライバをインストール。

pacman -S xf86-input-synaptics

Xではタッチパッドのタップとボタンクリックは働くが、 スライド操作は無視される。次の手順で モジュールを読み直すと改善する。

rmmod hid_acer # 前述のやつ
rmmod usbhid
modprobe hid_acer
modprobe usbhid

手動だと面倒なので,Archにサービス登録した。

[Unit]
Description=Enable touchpad on Acer Aspire Switch 11

[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/root/bin/touchpad_fix.sh     # 上のやつ

[Install]
WantedBy=multi-user.target

ダメな状態の時、gpmでは操作可能。cat /dev/input/event?も操作に反応する。 何がいけないのか、今のところわからない。一つ気がつく違いは、ダメな状態だとキーボードとタッチパッドが同じ名前”ITE Tech. Inc. ITE Device(8895)“になっていて、動く状態だとタッチパッドの名前末尾にUNKNOWが追加される。

キー&パッドの遅延・データロス

現象

laptop-mode使用時、次の不具合がでる。

  • パッド操作がギクシャクする
  • 2文字を早くタイプすると片方がロスト

2秒ほど待ってから操作するとこうなる。 続けてタイプしている時、パッドを 操作している時には問題ない。

原因

laptop-modeのデフォルト設定は、各USBデバイスを AutoSuspend (2秒)にする。しかし キーボードドックのキーとタッチパッドは、 オートサスペンドでは正常に動作しない。 入力操作によるレジュームの際、0.1 s 程度の遅延を 生じ、この間にさらにデータが発生するとデータが消失する。

改善方法

laptop-modeが2秒のautosuspendを設定してやがる

# vi /etc/laptop-mode/conf.d/runtime-pm 
AUTOSUSPEND_RUNTIME_DEVID_BLACKLIST="06CB:2991"

直接、キー+パッドコントローラのUSB autosuspendを無効にするならこう。しかしドックするたびにlaptop-modeが設定しなおす。

# echo "on" >  /sys/devices/pci0000\:00/0000\:00\:14.0/usb2/2-4/2-4.3/power/control

参考データ

  • タッチパッド pci-0000:00:14.0-usb-0:4.3:1.1-event-mouse

     /devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4.3/2-4.3:1.1/0003:06CB:2991.000E/input/input40
    
  • キーボード pci-0000:00:14.0-usb-0:4.3:1.0-event-kbd

     /devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4.3/2-4.3:1.0/0003:06CB:2991.000D/input/input39
    
  • タッチパッド+キーボード

     /devices/pci0000\:00/0000\:00\:14.0/usb2/2-4/2-4.3
    
  • udevadm info (タッチパッド+キーボード)

MAJOR=189
MINOR=140
DEVNAME=bus/usb/002/013
DEVTYPE=usb_device
DRIVER=usb
PRODUCT=6cb/2991/6
TYPE=0/0/0
BUSNUM=002
DEVNUM=013
[root@sake ohi3]# udevadm info  /sys/devices/pci0000\:00/0000\:00\:14.0/usb2/2-4/2-4.3
P: /devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4.3
N: bus/usb/002/013
E: BUSNUM=002
E: DEVNAME=/dev/bus/usb/002/013
E: DEVNUM=013
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4.3
E: DEVTYPE=usb_device
E: DRIVER=usb
E: ID_BUS=usb
E: ID_MODEL=ITE_Device_8595_
E: ID_MODEL_ENC=ITE\x20Device\x288595\x29
E: ID_MODEL_ID=2991
E: ID_REVISION=0006
E: ID_SERIAL=ITE_Tech._Inc._ITE_Device_8595_
E: ID_USB_INTERFACES=:030101:030102:
E: ID_VENDOR=ITE_Tech._Inc.
E: ID_VENDOR_ENC=ITE\x20Tech.\x20Inc.
E: ID_VENDOR_FROM_DATABASE=Synaptics, Inc.
E: ID_VENDOR_ID=06cb
E: MAJOR=189
E: MINOR=140
E: PRODUCT=6cb/2991/6
E: SUBSYSTEM=usb
E: TYPE=0/0/0
E: USEC_INITIALIZED=350712742

タッチスクリーン

特に手を加えなくても動くが、サスペンド/ハイバネーションからのレジューム後、反応がなくなる。

# rmmod hid_multitouch
# modprobe hid_multitouch

とすると、生き返る。タッチパッドも同じドライバなので巻き添えを食うが、使用には問題なさそう。 とりあえず、レジュームのフックを書いてみた。

# vi /usr/lib/systemd/system-sleep/example.sh
___
#!/bin/sh
case $1/$2 in
  post/*)
    rmmod hid_multitouch ; modprobe hid_multitouch
    ;;
esac
___
# chmod a+x それ

これでレジューム後も使えるようになった。もっとスマートにできないか。

Xのビデオドライバ

lspci -vによると、ビデオコントローラはi915。なので

# pacman -S xf86-video-intel

サウンド

ALSAが認識するサウンドーカード2つのうち、音の出ない方がデフォルトになってしまい、そのままでは再生できない。

# cat /proc/asound/cards
 0 [HDMI           ]: HDA-Intel - HDA Intel HDMI          <<これがダメなやつ
                      HDA Intel HDMI at 0xb0518000 irq 46
 1 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xb051c000 irq 43

使用されるモジュール:

# cat /proc/asound/modules
 0 snd_hda_intel
 1 snd_hda_intel

両方とも同じカーネルモジュールを使っている。 モジュールのブラックリストでは対応できない。

ALSAは最初に列挙されるカードをデフォルトにしているだけなので、カーネル内で保持されるデバイスリストのインデックスを操作することで、デフォルトを変えられるらしい。訂正: indexオプションは、モジュール固有のものらしい。カーネルモジュール一般の話ではなかった

# vi /etc/modprobe.d/snd_dev_index.conf
options snd_hda_intel index=1

initramfsにも取り込まなければならないので

# mkinitcpio -p linux

再起動してAudacious, mpv , mplayer でチェックOK。

ちなみにlspciでは:

#使いない方
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 0b)
#使える方
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)

bluetooth

ドライバがチップを制御するためにはファームウェアをDLしてきて/lib/firmware/ar3kにコピーすればOK. ここの最後にリンクがあった。

  • AthrBT_0x11020100.dfu
  • ramps_0x11020100_40.dfu

後はArch wiki の bluetoothに従えば良い。

# pacman -S bluez bluez-utils
# systemctl enable bluetooth

GUIはblueberry, bluemanなど。blueberryはrfkill をon/offに使うみたい。

laptop-mode-tools

液晶画面バックライトの輝度

  • /etc/laptop-mode/conf.d/lcd-brightness.conf

    必須なのは、sysfs上のパス

    BRIGHTNESS_OUTPUT="/sys/class/backlight/intel_backlight/brightness"
    

    輝度の範囲は、0~937。 (…intel_backlight/max_brightness)

    # バッテリー駆動時
    BATT_BRIGHTNESS_COMMAND="echo 270"
    # AC電源駆動時
    LM_AC_BRIGHTNESS_COMMAND="echo 900"
    # AC電源、laptop-modeでないとき
    NOLM_AC_BRIGHTNESS_COMMAND="echo 900"
    

    暗闇の中なら、10でもいける。

液晶画面のブランキング/パワーOFF

ブランク→パワーオフの順で適用。 ブランクさせるとバックライトが消灯するので、省電力としては十分かもしれない。

  • /etc/laptop-mode/conf.d/terminal-blanking.conf

    BATT_TERMINAL_BLANK_MINUTES=1
    BATT_TERMINAL_POWERDOWN_MINUTES=10
    

ワイヤレス

  • /etc/laptop-mode/conf.d/wireless-power.conf

    私はバッテリー駆動時にはワイヤレスを使うため、無効に。

    CONTROL_WIRELESS_POWER_SAVING="0"
    

有線LANのスピード(現在不可)

私のNIC (Logitec LAN-GTJU3H3 , ドライバax88179_178a)では mii-toolによるキャパビリティ検出がうまく働かない。100Mbpsに減速中は、最大速度100Mbpsが返される。他にも不具合があり、結果、laptop-modeは速度0 を設定しようとする。/usr/share/laptop-mode/modules/ethernet の改造版を作る必要がある。まだ作っていない。以下は、実際には機能していない。

速度変更にethtoolが要る。また、速度情報を得るのにnet-toolsが要る(mii-toolコマンド)。

pacman -S ethtool net-tools
  • /etc/laptop-mode/conf.d/ethernet.conf

    速度を絞るのを、throttleと呼ぶらしい。絞った状態でのスピードは、 “fastest”や”slowest”なら自動で調べてくれる。100Mbpsにしたければ “100”にする。ただ私のNICはethtool -s <iface> speed 100はエラーで 通らないので、”ethtool -s speed 100 duplex full”となるようにした。 つまり

    # THROTTLE_SPEED="100" まともなNIC??
    THROTTLE_SPEED="100 duplex full"
    

    バッテリーではスピードを絞り、AC電源では絞らない。

    BATT_THROTTLE_ETHERNET=1
    LM_AC_THROTTLE_ETHERNET=0
    

    バッテリーモードでかつ、活きたLANケーブルが刺さっていないなら、LANインターフェースを電源OFFする(デフォルト)。無線LANをつかうんでしょ、ということだそう。

    DISABLE_ETHERNET_ON_BATTERY=1
    

    USB接続のLANアダプタを使っている。本体とドックのどちらに 挿しても制御するよう、# ip linkで調べたインターフェース名を 2つ登録した。(udevでeth0などに統一させるほうがシンプルだが)

    ETHERNET_DEVICES="enp0s20u4u1u4 enp0s20u2u4"
    

    うちでは”auto”だと制御しないようなので、明示的にオンに。

    CONTROL_ETHERNET=“1”