notes/wayland_with_nvidia.md
2025-07-13 20:40:42 -07:00

239 lines
7.3 KiB
Markdown

## 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:**
1. 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).
2. Tiling Window Manager. I just can't go back to using a Floating DE, TWM's are
just better.
3. 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.
4. 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.
5. 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:**
1. Fading Inbetween WorkSpaces (I know, TABS in RiverWM).
2. Golden Section Spiraling tiling of workspaces like default BSPWM.
3. Cursor Disappears on Typing (exists as config flag in riverwm).
4. DMENU like application picker (currently experimenting, lots of options).
5. RedShift Like App (just installed gammastep, gonna experiment).
6. 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).
7. Devour For MPV and other applications (don't need a running terminal taking
up screen real estate, needs research).
8. 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).
9. Espanso text expansion (simple, has a wayland, compile, get rid of systemd
warnings, and try it out).
**ALREADY WORKING:**
1. Foot Terminal/RiverWM (lightest weight I could find with most customization,
comparable to BSPWM, Suckless Terminal, and Picom in resource usage).
2. 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:
1. edit your initial ramdisk config (backup first):
```
doas nvim /etc/mkinitcpio.conf
```
2. Under the MODULES=() line, between the parentheses enter:
```
nvidia nvidia_modeset nvidia_uvm nvidia_drm
```
3. Regenerate your initramfs images:
```
doas mkinitcpio -P
```
Next you'll need to enable direct management via grub:
1. Edit your grub config:
```
doas nvim /etc/default/grub
```
2. Look for the line that starts with GRUB_CMDLINE_LINUX_DEFAULT and append it:
```
nvidia-drm.modeset=1
```
3. And update you grub config
```
doas grub-mkconfig -o /boot/grub/grub.cfg
```
4. 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...
```
```