7.3 KiB
Getting NVIDIA To Work On Wayland (2023/2024 Edition)
Wayland notoriously doesn't work with NVIDIA GPUs, and there's alot of documentation on this already.
This .txt file is simply to document what I've gotten to work on Wayland with a NVIDIA 2060 GPU thus far. It is impressive what is possible now, though there is still some visual artifacting that happens on the riverwm at the time of this writing (01/01/2024).
For me there are a few requirements for me to completely convert over to Wayland.
REQUIREMENTS:
- I have to use NVIDIA (I'm not getting an AMD GPU just to contribute to ewaste for this alone, NVIDIA will have to continue to work towards getting Wayland to work if they don't want to incur Linus' wrath on this one).
- Tiling Window Manager. I just can't go back to using a Floating DE, TWM's are just better.
- Minimal RAM usage. I prefer my system to be as light weight on resource usage as possible. This means the TWM, Terminal Emulator, Compositor, must be as light weight as possible. This is not a hard rule, ultimately I need a system that can do a lot, but I don't want my background processes running all the time consuming more RAM than is necessary.
- Video Conferences. Zoom/Jitsi via the browser are a must. This is not yet tested, but to work properly, I'll be needing this to be stable before converting to Wayland.
- Gaming. Yeah, it's a requirement. All work and no play and all that. Not a huge deal, already got Cyberpunk working via Steam, just has some artifcating (see below in ALREADY WORKING section).
NICE TO HAVES:
- Fading Inbetween WorkSpaces (I know, TABS in RiverWM).
- Golden Section Spiraling tiling of workspaces like default BSPWM.
- Cursor Disappears on Typing (exists as config flag in riverwm).
- DMENU like application picker (currently experimenting, lots of options).
- RedShift Like App (just installed gammastep, gonna experiment).
- Xclip Like Clipboard manager for saving to clipboard from terminal without highlighting+ctrl+shift+c...yeah. (currently use catx aliased as xclip -sel clip, see ydotool and/or wtype).
- Devour For MPV and other applications (don't need a running terminal taking up screen real estate, needs research).
- NeoVim clipboard save (currently doesn't work on Wayland, can simply yank to clipboard in Neovim with single config flag, and works on X11, but not Wayland).
- Espanso text expansion (simple, has a wayland, compile, get rid of systemd warnings, and try it out).
ALREADY WORKING:
- Foot Terminal/RiverWM (lightest weight I could find with most customization, comparable to BSPWM, Suckless Terminal, and Picom in resource usage).
- NVIDIA GPU (kind of works, lots of configuration necessary, but I actually can play Cyberpunk 2077). Only issue is bad artifacting/stuttering (pockets of squares/glitching effect on heavy movement on screen, probably have to wait on NVIDIA update for this one to work).
INSTRUCTIONS IN CASE OF NEED TO DUPLICATE EFFORTS:
The following is a step by step series of instructions on how to get Wayland working again should you somehow need to reinstall everything (doomsday scenario):
Here are the current nvidia packages you have installed:
lib32-nvidia-utils 545.29.06-1
nvidia-dkms 545.29.06-1
nvidia-utils 545.29.06-1
opencl-nvidia 545.29.06-1
And here is a list of the current wayland protocol related packages you have:
egl-wayland 2:1.1.13-1
lib32-wayland 1.22.0-1
qt5-wayland 5.15.11+kde+r60-1
wayland 1.22.0-1
wayland-protocols 1.32-1
xorg-xwayland 23.2.3-1
Once all installed, ensure that you also install your niceties:
river
foot
swaybg
wlr-randr
This should be enough to get started, but to ensure Nvidia works well with steam and other applications, there was some significant configuration necessary. When I first started, the wrong resolution, no cursor, and like bspwm, river has little official documentation as it is still pre 1.0 release.
Let's first deal with getting NVIDIA working. In /etc/environment, paste the following:
# commented out is not needed
QT_QPA_PLATFORMTHEME="wayland;xcb"
# QT_STYLE_OVERRIDE=gtk
# QTWEBENGINE_CHROMIUM_FLAGS="-blink-settings=darkModeEnabled=true -enable-features=OverlayScrollbar,OverlayScrollbarFlashAfterAnyScrollUpdate,OverlayScrollbarFlashWhenMouseEnter"
# RADV_PERFTEST=aco
GBM_BACKEND=nvidia-drm
__GLX_VENDOR_LIBRARY_NAME=nvidia
WLR_NO_HARDWARE_CURSORS=1
ENABLE_VKBASALT=1
LIBVA_DRIVER_NAME=nvidia
You'll also want to ensure nvidia is set as the default GPU used by both grub on initramfs:
- edit your initial ramdisk config (backup first):
doas nvim /etc/mkinitcpio.conf
- Under the MODULES=() line, between the parentheses enter:
nvidia nvidia_modeset nvidia_uvm nvidia_drm
- Regenerate your initramfs images:
doas mkinitcpio -P
Next you'll need to enable direct management via grub:
- Edit your grub config:
doas nvim /etc/default/grub
- Look for the line that starts with GRUB_CMDLINE_LINUX_DEFAULT and append it:
nvidia-drm.modeset=1
- And update you grub config
doas grub-mkconfig -o /boot/grub/grub.cfg
- Probably overkill, but also set it in the kernel modules as well (don't bother with this!! Caused xorg to have bad race condition when utilized with other options, currently conferring with Artix team):
doas touch /etc/modprobe.d/nvidia_drm.conf && \
doas nvim /etc/modprobe.d/nvidia_drm.conf
And add this to the config file:
options nvidia_drm modeset=1 fbdev=1
FLAMESHOT Getting flameshot working was a bit of a pain. Ensure you have installed the following:
flameshot
grim
xdg-desktop-portal-wlr
You'll also need to appen these environment variables to you /etc/profile file:
export XDG_CURRENT_DESKTOP=sway
export XDG_SESSION_TYPE=wayland
In order to invoke, open up either a terminal (or better yet, dmenu, and invoke):
flameshot gui
You'll then receive a prompt on how to utilize flameshot. Select the region you wish to capture, and then hit Ctrl+S to save.
REPLACING XCLIP WITH WL_COPY
Replacing xclip for simple clipboard copying from terminal, you can install wl-copy and essentially use it for the same.
VIEWING IMAGES IN FOOT USING LIBSIXEL
You can indeed view images in the foot terminal, install ligsixel from official repos. Once installed, you can view these images from foot by typing in:
img2sixel image.png
AUTO STARTING IN TTY2 VIA ZPROFILE
To start river automatically when logging into tty2, add the following to your zprofile ( note the addition of dbus-launch, this is necessary for certain programs like keepassxc):
[[ -z $WAYLAND_DISPLAY && $XDG_VTNR -eq 2 ]] && exec dbus-launch --exit-with-session
This appears to work better actually:
[[ -z $WAYLAND_DISPLAY && -n $XDG_VTNR && $XDG_VTNR -eq 2 ]] && exec river
CONCLUSION
Once all set up, simply switch to a separate tty (ctrl + alt + F<your_choice>). Log in, and type the name of your window manager (river). I still have to research how to set up a lot via river, foot, and many other tools, but luckily I can use X11 until Nvidia catches up with Wayland (solve that artifcating issue NVIDIA, come on!!), and in the meanwhile, I can start to get ready for this eventual migration. Lastly, I'll have to look into how to get river to start up in TTY1, as .xinitrc obviously won't work for that...