1{
2 name = "xfce-wayland";
3
4 nodes.machine =
5 { pkgs, ... }:
6
7 {
8 imports = [
9 ./common/user-account.nix
10 ];
11
12 services.xserver.enable = true;
13 services.xserver.displayManager.lightdm.enable = true;
14 services.displayManager = {
15 defaultSession = "xfce-wayland";
16 autoLogin = {
17 enable = true;
18 user = "alice";
19 };
20 };
21
22 services.xserver.desktopManager.xfce.enable = true;
23 services.xserver.desktopManager.xfce.enableWaylandSession = true;
24 environment.systemPackages = [ pkgs.wlrctl ];
25 };
26
27 enableOCR = true;
28
29 testScript =
30 { nodes, ... }:
31 let
32 user = nodes.machine.users.users.alice;
33 rtdir = "XDG_RUNTIME_DIR=/run/user/${toString user.uid}";
34 in
35 ''
36 machine.wait_for_unit("display-manager.service")
37
38 with subtest("Wait for Wayland server"):
39 machine.wait_for_file("/run/user/${toString user.uid}/wayland-0")
40
41 with subtest("Check that logging in has given the user ownership of devices"):
42 machine.succeed("getfacl -p /dev/snd/timer | grep -q ${user.name}")
43
44 with subtest("Check if Xfce components actually start"):
45 for p in ["labwc", "xfdesktop", "xfce4-notifyd", "xfconfd", "xfce4-panel"]:
46 machine.wait_until_succeeds(f"pgrep {p}")
47
48 with subtest("Open Xfce terminal"):
49 machine.succeed("su - ${user.name} -c '${rtdir} xfce4-terminal >&2 &'")
50 machine.wait_until_succeeds("su - ${user.name} -c '${rtdir} wlrctl toplevel list | grep xfce4-terminal'")
51
52 with subtest("Open Thunar"):
53 machine.succeed("su - ${user.name} -c '${rtdir} thunar >&2 &'")
54 machine.wait_until_succeeds("su - ${user.name} -c '${rtdir} wlrctl toplevel list | grep Thunar'")
55 machine.wait_for_text('(Pictures|Public|Templates|Videos)')
56
57 with subtest("Check if various environment variables are set"):
58 cmd = "xargs --null --max-args=1 echo < /proc/$(pgrep -xf xfce4-panel)/environ"
59 machine.succeed(f"{cmd} | grep 'XDG_SESSION_TYPE' | grep 'wayland'")
60 machine.succeed(f"{cmd} | grep 'XFCE4_SESSION_COMPOSITOR' | grep 'labwc'")
61 machine.succeed(f"{cmd} | grep 'XDG_CURRENT_DESKTOP' | grep 'XFCE'")
62
63 with subtest("Check if any coredumps are found"):
64 machine.succeed("(coredumpctl --json=short 2>&1 || true) | grep 'No coredumps found'")
65 machine.sleep(10)
66 machine.screenshot("screen")
67 '';
68}