2f671ccc7a
Since the update to wlroots 0.13 (e03dde82a7
) the default VGA card isn't supported anymore and we needed to switch to virtio (qxl didn't work either). However, as it turned out "-vga virtio" (28b8cff301
) broke the test on AArch64. Luckily there's a third option that works on all three supported platforms: virtio-gpu-pci According to [0] "This device lacks VGA compatibility mode but is otherwise identical to the virtio vga device. UEFI firmware can handle this, and if your guests has drivers too you can use this instead of virtio-vga. This will reduce the attack surface (no complex VGA emulation support) and reduce the memory footprint by 8 MB (no pci memory bar for VGA compatibility). This device can be placed in a PCI Express slot." So in the end this seems like the ideal choice :) See also [1]. [0]: https://www.kraxel.org/blog/2019/09/display-devices-in-qemu/#virtio-gpu-pci [1]: https://patches.openembedded.org/patch/164351/
66 lines
1.9 KiB
Nix
66 lines
1.9 KiB
Nix
import ./make-test-python.nix ({ pkgs, lib, ...} :
|
|
|
|
let
|
|
cagebreakConfigfile = pkgs.writeText "config" ''
|
|
workspaces 1
|
|
escape C-t
|
|
bind t exec env DISPLAY=:0 ${pkgs.xterm}/bin/xterm -cm -pc
|
|
'';
|
|
in
|
|
{
|
|
name = "cagebreak";
|
|
meta = with pkgs.lib.maintainers; {
|
|
maintainers = [ berbiche ];
|
|
};
|
|
|
|
machine = { config, ... }:
|
|
let
|
|
alice = config.users.users.alice;
|
|
in {
|
|
# Automatically login on tty1 as a normal user:
|
|
imports = [ ./common/user-account.nix ];
|
|
services.getty.autologinUser = "alice";
|
|
programs.bash.loginShellInit = ''
|
|
if [ "$(tty)" = "/dev/tty1" ]; then
|
|
set -e
|
|
|
|
mkdir -p ~/.config/cagebreak
|
|
cp -f ${cagebreakConfigfile} ~/.config/cagebreak/config
|
|
|
|
cagebreak
|
|
fi
|
|
'';
|
|
|
|
hardware.opengl.enable = true;
|
|
programs.xwayland.enable = true;
|
|
environment.systemPackages = [ pkgs.cagebreak pkgs.wayland-utils ];
|
|
|
|
virtualisation.memorySize = 1024;
|
|
# Need to switch to a different GPU driver than the default one (-vga std) so that Cagebreak can launch:
|
|
virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ];
|
|
};
|
|
|
|
enableOCR = true;
|
|
|
|
testScript = { nodes, ... }: let
|
|
user = nodes.machine.config.users.users.alice;
|
|
XDG_RUNTIME_DIR = "/run/user/${toString user.uid}";
|
|
in ''
|
|
start_all()
|
|
machine.wait_for_unit("multi-user.target")
|
|
machine.wait_for_file("${XDG_RUNTIME_DIR}/wayland-0")
|
|
|
|
with subtest("ensure wayland works with wayinfo from wallutils"):
|
|
print(machine.succeed("env XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} wayland-info"))
|
|
|
|
# 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")
|
|
'';
|
|
})
|