My previous attempts at using Fedora KDE with Wayland were pretty miserable, and KDE was pretty much unusable under Wayland with the nVidia drivers. Never tried it with the nouveau drivers at the time, but after dumping the nVidia drivers a while back, I thought I’d give KDE Plasma Wayland another shot.
I don’t know if Wayland support under KDE got better or if it’s because I’m not using the nVidia drivers anymore (probably both), but I’m finding Plasma is pretty snappy under Wayland.
I normally have emacs started as a systemd service (systemd --user start emacs
) which runs emacs in daemon mode. Then I can just run emacsclient
and have it connect to the already running emacs. One big issue I came across was not being able to run emacsclient
and getting an *ERROR*: Display :0 can't be opened
when I ran emacsclient -c
from the command line.
The general consensus I found after searching the web for a while seemed to be that with systemd, the emacs daemon was starting before the graphical environment (Plasma), so display related environment variables weren’t available to emacs. Why this only happened with Plasma Wayland and not with Plasma X11, I don’t know.
When the emacs systemd service is enabled (systemd --user enable emacs
), /usr/lib/systemd/user/emacs.service
is symlinked into ~/.config/systemd/user/default.target.wants
. My first attempt to fix the issue was to move emacs.service
to graphical-session.target.wants
, but that didn’t help.
Thinking about the apparent root cause of the issue, I found a Unix StackExchange post about how to have systemd services start in a particular order. I copied /usr/lib/systemd/user/emacs.service
to ~/.config/systemd/user and linked it into graphical-session.target.wants
. Then I added two lines to the [Unit]
section:
Requires=plasma-kwin_wayland.service
After=plasma-kwin_wayland.service
This makes emacs.service
a dependency of plasma-kwin_wayland.service
and delays starting until after plasma-kwin_wayland.service
has finished starting.
After rebooting and logging back in, I verified that the emacs daemon was still starting up (systemd --user status emacs
) and was able to get emacsclient -c
to bring up the emacs window. Everything was back to working the way I expected.
Discover more from Imablog
Subscribe to get the latest posts sent to your email.