内容が中途半端ですみません。

とりあえず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ということで。

時間があったら更に調べたいと思います。

ParaViewをX window越しで使用するには色々と問題が多く、速度も遅いので興味深いものの一旦離れ、より現実的と思われるリモートデスクトップで使用する方針へ転換。VNC等が一般的と思われるが、ここでは公式ページにも記載のあるChromeリモートデスクトップで試してみる。

 

 

上のページに従って、リモート接続を設定する。

リモート接続の設定を終えたら実際に接続し、ParaViewを起動してみる。が、ウィンドウが黒のままで何も表示されない…

描画上の問題らしく、メニューと思われる位置をクリックするとメニューだけは正常に表示される。

そこで、おとなしくバイナリ版のParaView5.6.2をダウンロードして実行してみると、正常に動いた。しかし、速度は遅い。

やはりサーバー側ではpvserverを実行してローカルのParaViewから接続して可視化するのが現実的のよう。

前回までで、ParaViewについてはリモート接続での可視化はできたが、X window経由でのエラーが起きていた。

色々調べて行くと、ParaView固有の問題ではなく、そもそもX window経由でOpenGLを使用する事自体に問題があった。glxinfoを実行した結果は下記のとおり。

 

user@instance-1:~$ glxinfo

name of display: localhost:11.0

libGL error: No matching fbConfigs or visuals found

libGL error: failed to load driver: swrast

X Error of failed request:  GLXBadContext

  Major opcode of failed request:  149 (GLX)

  Minor opcode of failed request:  6 (X_GLXIsDirect)

  Serial number of failed request:  26

  Current serial number in output stream:  25

 

そこでまた色々調べると、下記のページにあるように、最近のXQuartzではセキュリティ上デフォルトでGLXが無効になっているらしい。

 

 

そこで、上記のページに従いGLXを有効にするようにMac側でdefaultsコマンドを実行し、XQuartzを再起動してGCPにログインしglxinfoを再度実行する。

 

(Mac上で)

bash-3.2$ defaults write org.macosforge.xquartz.X11 enable_iglx -bool true

 

(XQuartzを再起動しGCPにログイン後)

user@instance-1:~$ glxinfo

name of display: localhost:11.0

libGL error: No matching fbConfigs or visuals found

libGL error: failed to load driver: swrast

display: localhost:11  screen: 0

direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)

server glx vendor string: SGI

server glx version string: 1.4

server glx extensions:

(省略)

OpenGL vendor string: Intel Inc.

OpenGL renderer string: Intel Iris OpenGL Engine

OpenGL version string: 1.4 (2.1 INTEL-10.36.32)

(省略)

 
未だ一部でエラーと出るものの、一応は「X Error of failed request:  GLXBadContext」のエラーは解決した模様。しかしながら、この状態でParaViewを実行してもOpenGLのバージョンが古いと言われてしまい、可視化しようとすると異常終了してしまった。恐らくは、Mac側のOpenGLのバージョンを上げる必要がありそう。正確には前回の記事でMac上でParaViewが正常に動作していたので、XQuartzが参照するOpenGLのライブラリが古いことが原因と思われる。
ちなみに、Mac版のParaViewを起動してAbout ParaViewメニューからOpenGLのバージョンを確認すると、下記のとおり。
OpenGL Vendor    Intel Inc.
OpenGL Version    4.1 INTEL-10.36.32
OpenGL Renderer Intel Iris OpenGL Engine
 
さらにGCPからログアウトしてXQuartzのターミナルからMac上のOpenGLのバージョンをglxinfoコマンドで確認すると、下記のとおり。

OpenGL vendor string: Intel Inc.

OpenGL renderer string: Intel Iris OpenGL Engine

OpenGL version string: 2.1 INTEL-10.36.32

 

なかなか奥が深そう…