From 81b2ce96c6f41d794dd9d27c11590b339aaf1f35 Mon Sep 17 00:00:00 2001 From: Michael Weiss Date: Fri, 14 May 2021 16:11:13 +0200 Subject: [PATCH] nixos/tests/cagebreak: Fix the test Starting Cagebreak as X11 client doesn't work anymore as wlroots 0.13 started to require the DRI3 extension which isn't supported by LLVMpipe: machine # [ 13.508284] xsession[938]: 00:00:00.003 [ERROR] [backend/x11/backend.c:433] X11 does not support DRI3 extension machine # [ 13.666989] show_signal_msg: 62 callbacks suppressed machine # [ 13.666993] .cagebreak-wrap[938]: segfault at 8 ip 0000000000408574 sp 00007ffef76f2440 error 4 in .cagebreak-wrapped[407000+d000] machine # [ 13.670483] Code: f4 ff ff 4c 8b 84 24 70 01 00 00 8d 45 01 48 89 c5 49 8b 3c c0 48 85 ff 75 e4 4c 89 c7 e8 84 f4 ff ff 48 8b bc 24 18 01 00 00 <48> 8b 47 08 4c 8d 6f d8 48 8d 68 d8 48 39 df 75 0e eb 36 66 0f 1f machine # [ 13.518274] xsession[938]: 00:00:00.006 [ERROR] [../cagebreak.c:313] Unable to create the wlroots backend The test broke after updating Cagebreak in #121652 (bf8679ba948). XWayland still fails for unknown reasons: Modifiers specified, but DRI is too old libEGL warning: DRI2: failed to create dri screen libEGL warning: NEEDS EXTENSION: falling back to kms_swrast glamor: No eglstream capable devices found glamor: 'wl_drm' not supported Missing Wayland requirements for glamor GBM backend Missing Wayland requirements for glamor EGLStream backend Failed to initialize glamor, falling back to sw 00:00:03.534 [ERROR] [xwayland/server.c:252] waitpid for Xwayland fork failed: No child processes (EE) failed to write to XWayland fd: Broken pipe /nix/store/kcm3x8695fgycf31grzl9fy5gggwpram-xterm-367/bin/xterm: Xt error: Can't open display: :0 The fallback to software rendering is to be expected but it looks like XWayland is crashing with "failed to write to XWayland fd: Broken pipe". --- nixos/tests/cagebreak.nix | 51 +++++++++++++-------------------------- 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/nixos/tests/cagebreak.nix b/nixos/tests/cagebreak.nix index 87f43cc3c321..72b706de9a3f 100644 --- a/nixos/tests/cagebreak.nix +++ b/nixos/tests/cagebreak.nix @@ -17,25 +17,13 @@ in let alice = config.users.users.alice; in { + # Automatically login on tty1 as a normal user: imports = [ ./common/user-account.nix ]; + services.getty.autologinUser = "alice"; + hardware.opengl.enable = true; + programs.xwayland.enable = true; environment.systemPackages = [ pkgs.cagebreak pkgs.wallutils ]; - services.xserver = { - enable = true; - displayManager.autoLogin = { - enable = true; - user = alice.name; - }; - }; - services.xserver.windowManager.session = lib.singleton { - manage = "desktop"; - name = "cagebreak"; - start = '' - export XDG_RUNTIME_DIR="/run/user/${toString alice.uid}" - ${pkgs.cagebreak}/bin/cagebreak & - waitPID=$! - ''; - }; systemd.services.setupCagebreakConfig = { wantedBy = [ "multi-user.target" ]; @@ -56,17 +44,9 @@ in ''; }; - # Copied from cage: - # this needs a fairly recent kernel, otherwise: - # [backend/drm/util.c:215] Unable to add DRM framebuffer: No such file or directory - # [backend/drm/legacy.c:15] Virtual-1: Failed to set CRTC: No such file or directory - # [backend/drm/util.c:215] Unable to add DRM framebuffer: No such file or directory - # [backend/drm/legacy.c:15] Virtual-1: Failed to set CRTC: No such file or directory - # [backend/drm/drm.c:618] Failed to initialize renderer on connector 'Virtual-1': initial page-flip failed - # [backend/drm/drm.c:701] Failed to initialize renderer for plane - boot.kernelPackages = pkgs.linuxPackages_latest; - virtualisation.memorySize = 1024; + # Need to switch to a different VGA card / GPU driver than the default one (std) so that Cagebreak can launch: + virtualisation.qemu.options = [ "-vga virtio" ]; }; enableOCR = true; @@ -77,17 +57,20 @@ in in '' start_all() machine.wait_for_unit("multi-user.target") + machine.wait_until_tty_matches(1, "alice\@machine") + machine.send_chars("cagebreak\n") machine.wait_for_file("${XDG_RUNTIME_DIR}/wayland-0") with subtest("ensure wayland works with wayinfo from wallutils"): - machine.succeed("env XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} wayinfo") + print(machine.succeed("env XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} wayinfo")) - with subtest("ensure xwayland works with xterm"): - machine.send_key("ctrl-t") - machine.send_key("t") - machine.wait_until_succeeds("pgrep xterm") - machine.wait_for_text("${user.name}@machine") - machine.screenshot("screen") - machine.send_key("ctrl-d") + # TODO: Fix the XWayland test (log the cagebreak output to debug): + # with subtest("ensure xwayland works with xterm"): + # machine.send_key("ctrl-t") + # machine.send_key("t") + # machine.wait_until_succeeds("pgrep xterm") + # machine.wait_for_text("${user.name}@machine") + # machine.screenshot("screen") + # machine.send_key("ctrl-d") ''; })