xmonadを使っている時に一部のモニタの電源だけが起動時に点かないことへの対処
症状
PCモニタを4枚体制にしました - ncaq でPCモニタを増やしてから、 PC起動時に一部のモニタの電源だけが点かない時があると言う現象が起きていました。
現象が起きるモニタは確定していて、
xrandrで言うDP-4
のモニタだけ点かないことがあったりなかったりします。
DisplayPortで接続されているため、電源が点かないと認識もされず、 xmonadのワークスペース割り当てがおかしくなる副作用も発生していました。
起動してからxrandrで設定しなおせばちゃんと電源が点くのですが、履歴に残って一撃で実行できるとは言え、一々起動してからコマンドを実行するのは面倒です。
色々試したら本質的では無いですが一応解決したのでメモを公開しておきます。
環境は、 Linux, Gentoo, Xorg, xrandr, xmonad, LightDM, NVIDIA RTX 2080 Tiです。
環境
2021-05-29T20:50:02 ✖ Xorg -version
X.Org X Server 1.20.11
X Protocol Version 11, Revision 0
Build Operating System: Linux 5.10.27-gentoo x86_64 Gentoo
Current Operating System: Linux strawberry 5.10.27-gentoo #2 SMP Thu May 6 16:48:42 JST 2021 x86_64
Kernel command line: BOOT_IMAGE=/vmlinuz-5.10.27-gentoo root=UUID=2a3ebb02-b199-485e-bae3-9076dceae3e5 ro init=/usr/lib/systemd/systemd pci=nommconf
Build Date: 06 May 2021 08:39:38PM
Current version of pixman: 0.40.0
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
2021-05-29T20:50:24 ❯ xrandr --version
xrandr program version 1.5.1
Server reports RandR version 1.6
2021-05-29T20:51:07 ❯ xrandr
Screen 0: minimum 8 x 8, current 11520 x 3600, maximum 32767 x 32767
DP-0 connected primary 3840x2160+3840+1440 (normal left inverted right x axis y axis) 600mm x 340mm
3840x2160 60.00*+ 30.00
2560x1440 59.95
1920x1080 60.00 59.94
1600x900 60.00
1280x1024 60.02
1280x800 59.81
1280x720 60.00 59.94
1152x864 59.96
1024x768 60.00
800x600 60.32
720x480 59.94
640x480 59.94 59.93
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 2560x1440+3840+0 (normal left inverted right x axis y axis) 527mm x 296mm
2560x1440 59.95*+
2048x1152 60.00
1920x1080 60.00 59.94 29.97 23.98
1600x900 60.00
1280x1024 60.02
1280x720 60.00 59.94
1024x768 60.00
800x600 60.32
720x480 59.94
640x480 59.94 59.93
DP-2 connected 3840x2160+7680+1440 (normal left inverted right x axis y axis) 621mm x 341mm
3840x2160 60.00*+ 30.00 29.97 23.98
2560x1440 59.95
1920x1080 60.00 59.94 50.00 29.97 23.98
1680x1050 59.95
1440x900 59.89
1280x1024 75.02 60.02
1280x960 60.00
1280x800 59.81
1280x720 60.00 59.94 50.00
1152x864 75.00
1024x768 75.03 70.07 60.00
800x600 75.00 72.19 60.32 56.25
720x576 50.00
720x480 59.94
640x480 75.00 72.81 59.94 59.93
DP-3 disconnected (normal left inverted right x axis y axis)
DP-4 connected 3840x2160+0+1440 (normal left inverted right x axis y axis) 600mm x 340mm
3840x2160 60.00*+ 59.94 50.00 29.97 25.00 23.98 23.98
2560x1440 59.95
1920x1080 60.00 59.94 50.00
1680x1050 59.95
1440x900 59.89
1280x1024 60.02
1280x960 60.00
1280x800 59.81
1280x720 60.00 59.94 50.00
1024x768 60.00
800x600 60.32 56.25
720x576 50.00
720x480 59.94
640x480 59.94 59.93
DP-5 disconnected (normal left inverted right x axis y axis)
USB-C-0 disconnected (normal left inverted right x axis y axis)
2021-05-29T20:54:45 ❯ cat stack.yaml
packages:
- .
resolver: lts-17.4
xmonad 0.15
xmonad-contrib 0.16
やってダメだった策
startupHookでxrandrの実行完了を待ってもダメ
startupHook
で、
spawn "xrandr --output DP-0 --primary --output DP-2 --right-of DP-0 --output DP-4 --left-of DP-0 --output HDMI-0 --above DP-0"
でモニターの上下左右位置を設定しているのですが、これの実行完了を待たないからダメなのではと思いました。
なので、
xmonadの提供するspawn
ではなく、
System.Process
の提供するreadProcessWithExitCode
を使ってみました。
しかし、
~/.xsession-errors
に、
waitForProcess: does not exist (No child processes)
みたいな追記がされるだけで、特に解決しませんでした。
Legacy BIOSとの互換性を切ってもダメ
UEFIでLegacy BIOSとの互換性を切るとDisplayPortで繋がるという情報を目にしたので、試してみましたが効果はありませんでした。
ちなみに私がLegacy BIOSとの互換性をオンにしていたのは、昔のXPS 13でUEFI onlyでLinuxを起動するとグラフィックが壊滅したから、困らないならとりあえず有効にしておくと言う策を取っていたためです。
countScreensで解決
この問題とは関係なく、ラップトップとデスクトップでmanageHook
を共有していると、シングルモニタのラップトップでもワークスペースが分割されて、面倒と言う問題がありました。
この問題の解決策として、
countScreens
でシングルモニタであることが確認できたら余計なワークスペースを作らないことにしました。
この時、前のモニタの設定の時はcountScreens
でモニタ数が3の時のみxrandrを実行していたことに気が付きました。
もしかしてcountScreens
でスクリーン(モニタ)数を取得した場合、取得する過程で電源が必ずオンになるのでは?
と思いこの変更を適応してみた所、少なくとも現在は電源が必ずオンになっています。
countScreens
の内部でopenDisplay
とか行っているので必ず電源オンになるのではないかと思います。
本質的に原因を補足したわけではありませんが、とりあえず問題は解決しました。