Rc.local cannot open terminal on AppVM startup (can't open display)

I need rc.local to open a terminal upon AppVM startup so the user an enter a login credential into a script for an autostarted application. Currently rc.local contains the absolute path to a startup_handler.sh script, which runs <terminal> -e /path/to/python_script.py. Both rc.local and startup_handler.sh are marked executable, and the python script is also executable and has the #!/usr/bin/env python3 shebang.

I have used echo "<script name> ran at $(date)" >> /home/user/date.log in both rc.local and startup_handler.sh, and date.log shows that both scripts are run at boot.

The terminal in startup_handler.sh never opens, however.

Trying Different Terminals
xterm produces an error in the journal corresponding to the time rc.local runs:

misc-post.sh[560]: xterm: Xt error: Can't open display: :0

Even though adding set to rc.local shows that DISPLAY is set to :0 before startup_handler.sh runs, adding export DISPLAY=:0 to rc.local (set then showed _=DISPLAY=:0) does not mitigate the error.

alacritty produces a libegl warning: dri2: failed to authenticate error in the journal, and does so even when I open it after boot through dom0.

gnome-terminal produces a Failed to parse arguments: Cannot open display: error in the journal.

qubes-run-terminal fails.

I could use some other autostart method, like a .desktop file or even a systemd service, but I’d much rather keep things minimal.

Where should I begin debugging the “lack of a display”? Calling sleep 10 before the terminal opens doesn’t help. I tried using zenity, but that has a similar Gtk-WARNING **: 22:53:42.254: cannot open display: in the journal.

The qubes-misc-post systemd service runs rc.local. Examining the service indicates it isn’t started After the qubes-gui-agent service. Editing /usr/lib/systemd/system/qubes-misc-post.service in the TemplateVM as such doesn’t mitigate the display errors:

After=network-pre.target qubes-mount-dirs.service qubes-network.service qubes-firewall.service qubes-gui-agent.service

rc.local runs before xorg is started, adding an .desktop file to ~/.config/autostart is probably the easiest way to run an application that needs X.