内容が中途半端ですみません。
とりあえずOpenFOAMネタは諸般の事情により無期限中断です。
忘備録的に富士通のLifebook WA1/SにChromeOS Flexをインストールした際に、タッチパッドが上手く認識されなかったため対処法を書き留めました。
※ルート権限でカーネルの起動オプションとかを編集するので、操作を間違えると最悪の場合、データ消失や起動できなくなる恐れもあるので、自己責任でお願いします。
ChromeOS Flexとは色々な記事で紹介されていますが、Chrome Book搭載のOSのフリー版のようなものです。
それで、家で眠っていた富士通のLifebook WA1/Sを発掘してインストールしたのですが、Touchpadが使えませんでした。USBのマウスを差すと通常に使えるので、何らかの原因でTouchpadが認識されないようです。
そこで、色々調べて、まずはChromeOSをデベロッパモードにするところからです。
下記のページに記載のとおり、適当なLinuxディストリービューションで起動ディスクを作って、ターミナルからgpartedを起動し、EFIパーティションとなっている/dev/sdaを調べます。今回は/dev/sda12が対象でした。
上記記事のとおり、sudo mount /dev/sda12 /mntのようにして/mntにマウントします。
その後、vi /mnt/efi/boot/grub.cfgでgrub.cfgを編集して各menuentryの{}内の最後にcros_debugを追記します。
例えばこんな感じ。
menuentry "local image A" {
linux /syslinux/vmlinuz.A init=/sbin/init boot=local rootwait ro noresume noswap loglevel=7 noinitrd console= kvm-intel.vmentry_l1d_flush=always i915.modeset=1 cros_efi root=PARTUUID=C540B2D0-D220-ED47-A094-FDC4940A32D9 cros_debug
}
grub.cfgを編集したらreboot -nなどで再起動し、ChromeOS Flexで起動する。
起動後、Ctrl+Atl+Tを押すとcorshが起動するので、shellと打ち込みsudo bashを実行すればルートユーザとして操作が可能となる。
タッチパッドが認識されない原因を調べるため、dmesg|grep inputを実行してみる。
localhost / # dmesg|grep input
[ 0.319725] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0
[ 0.319890] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
[ 0.320031] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[ 0.397639] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input3
[ 0.432999] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
[ 9.755637] input: Fujitsu FUJ02E3 as /devices/LNXSYSTM:00/LNXSYBUS:00/FUJ02E3:00/input/input7
[ 10.378174] input: HDA Intel HDMI HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:03.0/sound/card0/input8
[ 10.378336] input: HDA Intel HDMI HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:03.0/sound/card0/input9
[ 10.378486] input: HDA Intel HDMI HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:03.0/sound/card0/input10
[ 10.378849] input: HDA Intel HDMI HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:03.0/sound/card0/input11
[ 10.378993] input: HDA Intel HDMI HDMI/DP,pcm=10 as /devices/pci0000:00/0000:00:03.0/sound/card0/input12
[ 10.497626] snd_hda_codec_realtek hdaudioC1D0: inputs:
[ 10.520019] input: HDA Intel PCH Mic as /devices/pci0000:00/0000:00:1b.0/sound/card1/input13
[ 10.520168] input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card1/input14
localhost / #
上記を見ると、touchpadらしきものは現れていない。キーボードはi8042、すなわちPS/2経由で接続されていることがわかる。色々調べると、LifebookのタッチパッドもPS/2経由らしいので、dmesg|grep i8042を実行してみる。
localhost / # dmesg|grep i8042
[ 0.426621] i8042: PNP: PS/2 Controller [PNP0320:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12
[ 0.429314] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 0.429333] serio: i8042 AUX port at 0x60,0x64 irq 12
[ 0.432999] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
localhost / #
とりあえず、i8042 KBD portでキーボードが認識され、i8042 AUX portで恐らくtouchpadが接続されているものの、inputとして現れてきていない様子。
なお、ここに至るまでにlshwとかも試し、touchpad自体は接続されていることは確認できたが詳細は割愛する。ちなみにChromeOS Flexにはデフォルトでlshwは入っていないようなので、適当なLinuxディストリビューションでUSB起動して確かめた。
ここまでで、タッチパッドは接続されているもののドライバがロードされてない(?)ようだということまでは分かった。色々調べると他のLifebookでもLinuxを使用する際に同様な現象があるようだった。
上記ページを見ると、カーネルのブートパラメータにi8042.notimeoutとi8042.nomuxを追加すると解決したと書いてあった。ここで、nomuxオプションは下記のページなどを見ると、i8042に関するバグで複数のデバイスをPS/2経由で接続可(例えばThikpadのタッチパッドとトラックスティックなど)とするmultiplexという機能が使用できるかの判定を誤ることがあるというものらしい。
以下のページを見るとmultiplexが有効の場合はdmesgでAUX0、AUX1、AUX2、AUX3とかが出るらしい。上の方で書いたとおり、今回はAUXしか出てきていないので、とりあえずmultiplexは無効で認識していると思われる。
ということで、多分nomuxの方は必要ないと考えて、カーネル起動オプションにi8042.notimeoutだけを追記して起動してみたらタッチパッドが正常に使えるようになった。
設定方法は、デベロッパモードを有効にした場合と同じやり方ですが、一旦デベロッパモードを有効にしておけばChromeOS Flex上から変更できます。EFIパーティションについても私の環境ではLinuxで起動した場合と同じため、mountコマンドも同じでした。
ChromeOS Flex上でCtrl+Alt+Tでcroshを起動し、shellコマンドを打ち込み、更にsudo bashでルートユーザになります。その後、マウントポイントとして/home下に適当にTEMPなどのディレクトリを作り、/dev/sda12をマウントします。
localhost / # mkdir /home/TEMP
localhost / # mount /dev/sda12 /home/TEMP
正しくマウントできたらvi /home/TEMP/efi/boot/grub.cfgでgrub.cfgを編集して各menuentryの{}内の最後にi8042.notimeoutを追記します。
例えばこんな感じ。
menuentry "local image A" {
linux /syslinux/vmlinuz.A init=/sbin/init boot=local rootwait ro noresume noswap loglevel=7 noinitrd console= kvm-intel.vmentry_l1d_flush=always i915.modeset=1 cros_efi root=PARTUUID=C540B2D0-D220-ED47-A094-FDC4940A32D9 cros_debug i8042.notimeout
}
編集できたらreboot -nを打ち込んで再起動すると、タッチパッドが正常に使えるようになりました。
再起動後に改めてdmesgを確認すると、下記のようにカーネル起動オプションが渡され、タッチパッドが認識されていることがわかります。
localhost / # dmesg|grep i8042
[ 0.000000] Command line: BOOT_IMAGE=/syslinux/vmlinuz.A init=/sbin/init boot=local rootwait ro noresume noswap loglevel=7 noinitrd console= kvm-intel.vmentry_l1d_flush=always dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=1 i915.modeset=1 cros_efi root=/dev/dm-0 "dm=1 vroot none ro 1,0 4710400 verity payload=PARTUUID=C540B2D0-D220-ED47-A094-FDC4940A32D9 hashtree=PARTUUID=C540B2D0-D220-ED47-A094-FDC4940A32D9 hashstart=4710400 alg=sha256 root_hexdigest=0cf4e864544e25fc404ffa706600413abb2272304c8a4135c892d465efc0ec51 salt=99fb3c501bb1be9de659a731ba95e720e25f20c40e7a512c32878bc4ce06f864" cros_debug i8042.notimeout
[ 0.034497] Kernel command line: BOOT_IMAGE=/syslinux/vmlinuz.A init=/sbin/init boot=local rootwait ro noresume noswap loglevel=7 noinitrd console= kvm-intel.vmentry_l1d_flush=always dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=1 i915.modeset=1 cros_efi root=/dev/dm-0 "dm=1 vroot none ro 1,0 4710400 verity payload=PARTUUID=C540B2D0-D220-ED47-A094-FDC4940A32D9 hashtree=PARTUUID=C540B2D0-D220-ED47-A094-FDC4940A32D9 hashstart=4710400 alg=sha256 root_hexdigest=0cf4e864544e25fc404ffa706600413abb2272304c8a4135c892d465efc0ec51 salt=99fb3c501bb1be9de659a731ba95e720e25f20c40e7a512c32878bc4ce06f864" cros_debug i8042.notimeout
[ 0.426621] i8042: PNP: PS/2 Controller [PNP0320:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12
[ 0.429314] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 0.429333] serio: i8042 AUX port at 0x60,0x64 irq 12
[ 0.432999] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
[ 1.274727] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input6
localhost / # dmesg|grep input
[ 0.319725] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0
[ 0.319890] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
[ 0.320031] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[ 0.397639] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input3
[ 0.432999] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
[ 1.189913] psmouse serio1: synaptics: Your touchpad (PNP: SYN1f08 PNP0f13) says it can support a different bus. If i2c-hid and hid-rmi are not used, you might want to try setting psmouse.synaptics_intertouch to 1 and report this to linux-input@vger.kernel.org.
[ 1.274727] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input6
[ 2.255633] LoadPin: kernel-module pinned obj="/lib/modules/5.10.136-19394-g7a24dee39fa0/kernel/drivers/input/joydev.ko.gz" pid=167 cmdline="udevd --daemon"
[ 9.755637] input: Fujitsu FUJ02E3 as /devices/LNXSYSTM:00/LNXSYBUS:00/FUJ02E3:00/input/input7
[ 10.378174] input: HDA Intel HDMI HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:03.0/sound/card0/input8
[ 10.378336] input: HDA Intel HDMI HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:03.0/sound/card0/input9
[ 10.378486] input: HDA Intel HDMI HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:03.0/sound/card0/input10
[ 10.378849] input: HDA Intel HDMI HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:03.0/sound/card0/input11
[ 10.378993] input: HDA Intel HDMI HDMI/DP,pcm=10 as /devices/pci0000:00/0000:00:03.0/sound/card0/input12
[ 10.497626] snd_hda_codec_realtek hdaudioC1D0: inputs:
[ 10.520019] input: HDA Intel PCH Mic as /devices/pci0000:00/0000:00:1b.0/sound/card1/input13
[ 10.520168] input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card1/input14
localhost / #
若干怪しげなメッセージが出ていますが、とりあえず使えているので今回はOKということで。
時間があったら更に調べたいと思います。