Automatically set the proper video output given a video device (VGA) is unavailable due to hardware-passthrough (VFIO) or any other reason, in the X.Org display environment for a Linux machine.
- 1. Why?
- 2. Related Projects
- 3. Documentation
- 4. Host Requirements
- 5. Download
- 6. Usage
- 7. How Auto X.Org Works
- 8. Filenames and Pathnames Modified by Generate Evdev
- 9. Contact
- 10. References
X.Org will specify a VGA device to be the primary video output. When that VGA device is Passed-through or restricted to Virtual Machines (VMs) only (like in a VFIO setup), the VGA device cannot be used by the Host machine (Linux). Unfortunately, X.Org will not search for the next valid VGA device. This is where auto-X.Org steps in...
This script will automatically set the proper video output everytime, as it runs at Host startup. This flexibility is very useful for a new or changing VFIO setup.
Project | Codeberg | GitHub |
---|---|---|
Deploy VFIO | link | link |
Auto X.Org | link | link |
Generate Evdev | link | link |
Guest Machine Guide | link | link |
Libvirt Hooks | link | link |
Power State Virtual Machine Manager | link | link |
- What is VFIO?
- VFIO Discussion and Support
- Hardware-Passthrough Guide
- Virtual Machine XML Format Guide
Linux.
systemd
for system services.X.Org
orX11
as the video display environment.Wayland
is not supported.- Wayland causes problems for NVIDIA devices (as of 2024).
Two (2) or more video devices. This script is not necessary for machines with one video device, as X.Org will find it.
-
Download the
.zip
file:- Viewing from the top of the repository's (current) webpage, click the
drop-down icon:
···
on Codeberg.<> Code
on GitHub.
- Click
Download ZIP
and save. - Open the
.zip
file, then extract its contents.
- Viewing from the top of the repository's (current) webpage, click the
drop-down icon:
-
Clone the repository:
- Open a Command Line Interface (CLI).
- Open a console emulator (for Debian systems: Konsole).
- Open a existing console: press
CTRL
+ALT
+F2
,F3
,F4
,F5
, orF6
.- To return to the desktop, press
CTRL
+ALT
+F7
. F1
is reserved for debug output of the Linux kernel.F7
is reserved for video output of the desktop environment.F8
and above are unused.
- To return to the desktop, press
- Change your directory to your home folder or anywhere safe:
cd ~
- Clone the repository:
git clone https://www.codeberg.org/portellam/auto-xorg
git clone https://www.github.com/portellam/auto-xorg
- Open a Command Line Interface (CLI).
-
Open the CLI (see Download).
-
Go to the directory of where the cloned/extracted repository folder is:
cd name_of_parent_folder/auto-xorg/
-
Make the installer script file executable:
chmod +x installer.bash
- Do not make any other script files executable. The installer will perform this action.
- Do not make any non-script file executable. This is not necessary and potentially dangerous.
- From within the project folder, execute:
sudo bash installer.bash
- Or after installation, from any folder execute:
sudo bash auto-xorg
- The CLI's shell (bash) should recognize that the script file is located in
/usr/local/bin
.
- The CLI's shell (bash) should recognize that the script file is located in
-h, --help Print this help and exit.
Update X.Org:
-r, --restart-display Restart the display manager immediately.
Set device order:
-f, --first Find the first valid VGA device.
-l, --last Find the last valid VGA device.
Prefer a vendor:
-a, --amd AMD or ATI
-i, --intel Intel
-n, --nvidia NVIDIA
-o, --other Any other brand (past or future).
- Set options to find first valid AMD/ATI VGA device, then install:
sudo bash auto-xorg.bash -f -a
- Find last valid NVIDIA VGA device, then restart the display manager immediately:
sudo bash auto-xorg -l -n -r
If the auto-xorg service fails, to diagnose review the log, execute:
sudo journalctl -u auto-xorg
Failure may be the result of absent VGA device(s), or an exception. Review the log to debug.
- Runs once at boot (as a service) or run at user discretion.
- Parses list of VGA devices:
lspci -m | grep --extended-regexp --ignore-case 'vga|graphics'
- Saves valid and available VGA device:
lspci -ks 04:00.0 | grep --extended-regexp --ignore-case 'driver|VGA'
04:00.0 VGA compatible controller: ...
Kernel driver in use: nvidia
- Invalid example:
```
lspci -ks 04:00.0 | grep --extended-regexp --ignore-case 'driver|VGA'
01:00.0 VGA compatible controller: ...
Kernel driver in use: vfio-pci
```
- Appends to X.Org file:
/etc/X11/xorg.conf.d/10-auto-xorg.conf
/etc/X11/xorg.conf.d/
/usr/local/bin/
/etc/systemd/system/
Did you encounter a bug? Do you need help? Please visit the Issues page (Codeberg, GitHub).
PCI passthrough via OVMF. ArchWiki. Accessed June 14, 2024. https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF.
VFIO - ‘Virtual Function I/O’ - The Linux Kernel Documentation. The linux kernel. Accessed June 14, 2024. https://www.kernel.org/doc/html/latest/driver-api/vfio.html.
VFIO Discussion and Support. Reddit. Accessed June 14, 2024. https://www.reddit.com/r/VFIO/.
XML Design Format. GitHub - libvirt/libvirt. Accessed June 18, 2024. https://github.com/libvirt/libvirt/blob/master/docs/formatdomain.rst.