Some datacenter and server farms disable GPUs in their servers by default. The hardware is present and functional, but the devices are hidden at the BIOS or firmware level to simplify inventory management and reduce support complexity. Hetzner does not officially support GPU passthrough or direct GPU use on auction servers, but the hardware can be enabled manually. Once enabled, the GPU can be used for hardware transcoding in Plex, Jellyfin, and photo processing in Immich.
Before even starting, check the CPU has an a GPU. A simple search can solve this, AI chatbot can find this detail as well as what codecs are available.
Does the i7 8700 have a GPU and what codecs or transcodes are possible?
Yes — the Core i7-8700 (the non-K, 65W variant from Intel's 8th-gen "Coffee Lake" line) includes integrated graphics: Intel UHD Graphics 630.
(Note: the i7-8700K also has UHD 630, so both variants have it — only if you'd bought a "KF" or "F" suffix model would the iGPU be disabled/absent. The 8700 has no F variant, so you're safe either way.)
UHD Graphics 630 specs relevant to transcoding
Execution units: 24 EUs
Base/boost clock: ~350 MHz / up to 1.2 GHz
Media engine: Intel Quick Sync Video (QSV), including fixed-function hardware decode/encode blocks
...This post covers enabling the GPU in the system, installing drivers, and configuring both Docker containers and native installations to access the device.
Prerequisites
This guide was tested on Ubuntu 26.04 Server with an Intel integrated GPU on a Hetzner auction server. The process applies to most Debian-based distributions. You need root or sudo access. Confirm that your server has a GPU by checking the hardware specification in your Hetzner account or by running lspci before the BIOS is modified. If no GPU is listed under VGA or Display, the hardware may not be available:
lspci | grep -i vgaThe output will show any variation of “vga”:
...
00:02.0 VGA compatible controller: Intel Corporation CoffeeLake-S GT2 [UHD Graphics 630]
...Why Hetzner Disables GPUs
Hetzner auction servers come from decommissioned infrastructure. GPUs add configuration complexity, increase power draw, and require different driver support depending on the model. Disabling them by default allows Hetzner to treat all auction servers as identical from a support perspective. The company does not advertise GPU availability and does not guarantee the device will remain functional or accessible after updates. In fact, installing proprietary drivers will require care during upgrades and updates.
Install Intel GPU Drivers
For Intel integrated GPUs, install the non-free firmware and VA-API drivers:
sudo apt update
sudo apt install intel-media-va-driver-non-free vainfoThe intel-media-va-driver-non-free package provides hardware acceleration support for recent Intel GPUs. The vainfo utility reports which codecs the GPU can decode and encode.
Run vainfo to confirm the driver loaded, ignore errors about missing X11. There may be no X11 on the server, this is optional:
sudo vainfoOutput should list the driver in use and supported profiles. Example:
vainfo: VA-API version: 1.14 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.3.1
VAProfileH264Main : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLDIf vainfo returns an error about no devices found, check that /dev/dri exists and contains devices:
ls -l /dev/driYou should see renderD128 and possibly card0 or driver0. If these are missing, the kernel module may not have loaded. Check dmesg for errors:
dmesg | grep -i drmSet Permissions for Media Users
The GPU device files are owned by root and the render or video group. Add your media service user to the render group:
sudo usermod -aG render jellyfinReplace jellyfin with the username running your media service. If using the video group instead, adjust accordingly. Restart the media service after changing group membership:
sudo systemctl restart jellyfinConfigure Jellyfin or Emby for Hardware Transcoding
For a native Jellyfin or Emby installation, log in to the Jellyfin web interface and go to Dashboard, then Playback. Under Hardware Acceleration, select Video Acceleration API (VAAPI) from the dropdown. Set the VA-API device to /dev/dri/renderD128. Enable the codecs you want to hardware decode and encode, typically H264 and HEVC.
Save the settings and attempt to play a video that requires transcoding. Monitor the Jellyfin logs:
sudo journalctl -u jellyfin -fLook for lines indicating VAAPI initialization. If transcoding falls back to software, check the device path and group membership.
Configure Jellyfin or Emby in Docker
When running Jellyfin in Docker, pass the GPU device into the container. Add the following to your docker-compose.yml:
services:
jellyfin:
image: jellyfin/jellyfin:latest
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
group_add:
- "989"
volumes:
- /path/to/config:/config
- /path/to/media:/media
...Replace 989 with the numeric group ID of the render group on your host. Find it with:
getent group renderThe output will show something like “render:x:989”. Use the number in the group_add field.
Restart the container:
docker-compose stop jellyfin
docker-compose up -d jellyfinConfigure hardware acceleration in the Jellyfin web interface as described in the native installation section.
Configure Plex for Hardware Transcoding
Plex hardware transcoding requires a Plex Pass subscription. In the Plex web interface, go to Settings, then Transcoder. Enable Use hardware acceleration when available. Plex will attempt to detect and use the GPU automatically.
For Docker installations, pass the device and set the group, as above, with Jellyfin:
services:
plex:
image: plexinc/pms-docker:latest
devices:
- /dev/dri:/dev/dri
group_add:
- "989"
volumes:
- /path/to/config:/config
- /path/to/media:/mediaPlex accesses the entire /dev/dri directory rather than a specific render node. Restart the container and verify transcoding uses the GPU by monitoring CPU usage during playback of a transcoded stream. Hardware transcoding will show significantly lower CPU load compared to software transcoding.
Configure Immich for Hardware Acceleration
Immich uses hardware acceleration for thumbnail generation, video transcoding, and machine learning tasks. The configuration is set through environment variables in the docker-compose.yml file.
Add the device and environment variables to the immich-server and immich-microservices containers:
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release
devices:
- /dev/dri:/dev/dri
group_add:
- "989"
environment:
- IMMICH_MEDIA_FFMPEG_ACCEL=vaapi
volumes:
- /path/to/upload:/usr/src/app/upload
immich-microservices:
image: ghcr.io/immich-app/immich-server:release
devices:
- /dev/dri:/dev/dri
group_add:
- "989"
environment:
- IMMICH_MEDIA_FFMPEG_ACCEL=vaapi
volumes:
- /path/to/upload:/usr/src/app/uploadRestart the containers:
docker-compose stop immich-*
docker-compose up -d immich-*Immich will use the GPU for video thumbnail generation and transcoding. Check the logs to confirm:
docker-compose logs -f immich-microservicesLook for references to vaapi in ffmpeg command output.
Verify GPU Usage
Install intel-gpu-tools to monitor GPU activity:
sudo apt install intel-gpu-toolsRun intel_gpu_top to see real-time GPU usage:
sudo intel_gpu_topStart a transcoding job in Jellyfin, Plex, or Immich and observe the video engine usage percentage increase. If the GPU remains at 0 percent, the service is either not successfully accessing the hardware or the transcode is not necessary; only the logs will tell.
Troubleshooting
If hardware acceleration does not work, verify the following:
- The GPU is visible in lspci
- The /dev/dri/renderD128 device exists
- The service user is a member of the render or video group
- The Docker container has the device passed through and the correct group_add value
- vainfo runs without errors
Check dmesg for firmware errors:
dmesg | grep -i firmwareIf firmware files are missing, install linux-firmware and reboot:
sudo apt install linux-firmware
sudo rebootFor Docker containers, confirm the group ID matches between host and container. Running id inside the container can help debug permission issues:
docker exec -it jellyfin idThe output should show the render group in the group list.
Power Consumption
Enabling the GPU increases idle power draw by 5 to 15 watts depending on the model. Under load, power consumption will increase further but remains lower than software transcoding on the CPU. For a server handling multiple simultaneous transcodes, hardware acceleration reduces both power consumption and heat output compared to CPU-only transcoding.
Notes
Hetzner does not support GPU use on auction servers.
Not all auction servers have GPUs. The availability depends on the specific hardware model. Check lspci output before purchasing if GPU access is a requirement.
If you are running multiple media services, all can share the same GPU. The driver handles scheduling and resource allocation. There is no need to dedicate the GPU to a single application.
AI assistance is used on this site for language, formatting, and turning research into a consistent template. It is not used to perform the underlying research or verify technical claims. Every command, configuration, and step in this post is tested by hand before publication.