I am trying to run a Plasma session as a different user from bash by running sudo -u $TARGET_USER dbus-launch --exit-with-session startplasma-wayland.
However, when trying to do so, I get an error “Could not create wayland socket”.
My goal is to start a Plasma session as a specified user, wait for the user to log out and continue running the script.
- Does anyone know how I might be able to fix this error?
- Do you know of another way to start a Plasma session as a different user and wait for the session to exit?
I also tried to do the same using the sudo --preserve-env --set-home XDG_RUNTIME_DIR=/run/users/$(id -u $TARGET_USER) switches.
When doing so, I get the following messages repeatedly:
No backend specified, automatically choosing drm
kwin_core: Failed to take control of /org/freedesktop/login1/session/_311 session. Maybe another compositor is running?
kwin_wayland_drm: Failed to open drm device at "/dev/dri/card1"
kwin_wayland_drm: No suitable DRM devices have been found
However, logging in to the tty with the $TARGET_USER directly and running dbus-launch --exit-with-session startplasma-wayland works properly as expected.


Alright, so I found an absolute trainwreck of a solution. All the ways I have tested (
sudo,login,openvt,machinectl,systemd-run) don’t work because important variables likeXDG_SESSION_IDare not created. So probably these methods don’t open up a real session or something…?What I did is to automatically open up a session for the specified user - in this case using
getty. Using these code lines, I created asystemd-configuration and booted it up by runningsystemctl daemon-reload:source: https://wiki.archlinux.org/title/Getty
After this, the user has a running session and proper environment variables set up. I use
pgrepto wait for the expected process to show up:The environment variables of the process with the PID
$sessionPidcan then be borrowed to runstartplasma-waylandproperly as the desired user:The fact, that this command would always end up focussing on tty2 after exiting the plasma session, I kind of abused the
openvt-command to force the focus to return to the previous tty:I also did some quirks like using
openvtto find an unused tty. If you want to see the whole thing in action - script is here:https://git.nuth.ch/manuth/PortValhalla/src/commit/b6329693d6fd717c8ca6f7a278a864930b7f705d/scripts/Common/Software/rclone/main.fish#L10-L60