deans-dox
 / Linux / linux-browser-build.md

Proxmox host steps

1. Verify IOMMU enabled

Kernel cmdline should already contain:

amd_iommu=on iommu=pt

Verify:

dmesg | grep -e IOMMU -e AMD-Vi

2. Get AMD device IDs

lspci -nn -s 79:00.0
lspci -nn -s 79:00.1

Example result IDs:

1002:13c0
1002:1640

3. Bind GPU + audio to VFIO

Create:

/etc/modprobe.d/vfio.conf

Contents:

options vfio-pci ids=1002:13c0,1002:1640

4. Ensure VFIO modules load

Append to:

/etc/modules
vfio
vfio_pci
vfio_iommu_type1
vfio_virqfd

5. Prevent framebuffer grabbing (ONLY if needed)

If host still touches the iGPU:

Edit GRUB cmdline:

/etc/default/grub

Add:

video=efifb:off

Then:

update-grub

6. Rebuild initramfs

update-initramfs -u
reboot

7. Verify VFIO binding

After reboot:

lspci -nnk -s 79:00.0
lspci -nnk -s 79:00.1

Should show:

Kernel driver in use: vfio-pci

8. Create VM

Recommended:

  • BIOS: OVMF (UEFI)
  • Machine: q35
  • CPU: host
  • Display: none
  • Network: virtio
  • Disk: virtio-scsi

9. Attach GPU

In VM hardware:

Add PCI Device

Add:

  • 79:00.0
  • 79:00.1

Enable:

  • PCIe
  • All Functions OFF
  • ROM-Bar ON

Debian guest steps

1. Install minimal Debian

Install:

  • SSH server
  • standard utilities

NO desktop environment.


2. Install lightweight GUI

apt update

apt install \
  xorg \
  openbox \
  lightdm \
  xterm

3. Install AMD firmware + VAAPI

apt install \
  firmware-amd-graphics \
  mesa-va-drivers \
  vainfo

Verify:

vainfo

Should show:

  • H264
  • HEVC
  • VAAPI support

4. Install Chrome

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

apt install ./google-chrome-stable_current_amd64.deb

5. Enable Chrome VAAPI

Create Chrome launcher flags:

mkdir -p ~/.config/chrome-flags.conf

Or launch manually:

google-chrome \
  --enable-features=VaapiVideoDecoder \
  --use-gl=egl

Verify:

  • chrome://gpu

6. Configure auto-login

LightDM:

/etc/lightdm/lightdm.conf

Add:

[Seat:*]
autologin-user=YOURUSER
autologin-session=openbox

7. Autostart Chrome

Create:

~/.config/openbox/autostart

Contents:

google-chrome --start-maximized &

Or kiosk:

google-chrome --kiosk https://startpage &

8. Install Sunshine

apt install sunshine

Enable:

systemctl enable sunshine
systemctl start sunshine

9. Pair Moonlight

From client:

moonlight pair <vm-ip>

Then connect.


10. Optional: install RustDesk backup access

apt install rustdesk

Useful if Sunshine/display breaks.