OpenIndiana Hipster · test package

Xorg 1.19.7 framebuffer fallback (rev 18)

Status: test candidate · VM runtime matrix passed

This is a corrected test build of the Hipster X server, Xorg 1.19.7. It replaces the withdrawn xorg-autodetect-20261020 kit. It changes one narrow decision: when the console is the illumos bitmap framebuffer, Xorg uses the generic illumosfb driver instead of vesa only when the machine has no legacy video BIOS.

You install it into a new boot environment (BE) that is a copy of the system you are running now. You switch to that BE deliberately, and you switch back deliberately. Nothing in this guide relies on a reset or a reboot to return you to your original system. Switching back is its own step.

If you tried the earlier kit

The xorg-autodetect-20261020 package (revision 17) was withdrawn. It could pick modesetting on machines where the Intel driver had worked, and its guide wrongly promised that a reboot would return you to your original BE.

Do not use this kit to repair a machine that has revision 17 installed. Keep both of your BEs; do not delete either. Please comment on the pull request and you will get instructions for your specific machine. You do not need to retry or reinstall anything.

What changed

Hipster revision 15 started treating the illumos bitmap console (illumos_fb) as proof that vesa cannot work. On that console Xorg dropped vesa and fell back to illumosfb. But the bitmap console appears with a legacy BIOS (VBE) as well as with pure UEFI (GOP). Many machines still have a legacy video BIOS, and on those vesa works. illumosfb cannot change modes and stays at the resolution the firmware chose.

This build keeps the normal Xorg order and changes only that fallback:

  1. PCI-matched drivers come first, as before. For example, a legacy Intel machine still tries intel, then vesa.
  2. Only on an illumos_fb console, Xorg checks for a legacy video BIOS:
    • present: vesa stays;
    • cannot tell: vesa stays;
    • definitely absent: vesa is replaced by illumosfb.
  3. Nothing else changes. This build does not pick modesetting automatically. A Device section that names a driver, including the 10-vesa.conf workaround, still takes precedence and bypasses all of this.

The Xorg log now names the console whenever it can read the console identifier, so you can tell whether your machine is affected at all.

Keyboard symptoms reported alongside the display problem have no known connection to this change. This build does not touch keyboard handling. Your before-and-after observations help work out whether they are related.

Who this test is for

Look at your current Xorg log:

grep 'console driver' /var/log/Xorg.0.log

Do not install this if you run the newer Xorg 21.1 stack. Stay on 21.1; do not downgrade. This kit does not select or switch any DRM driver stack.

The packages are built for current Hipster OS packages. If the dry run in step 4 shows that your system is too old, stop and report it. Do not update or downgrade your OS to make this test fit.

What has been tested so far

The full candidate-list checks pass, including a legacy Intel KMS device that has connectors but no dumb-buffer support. The old KMS shortcut fails that same check. Native builds and package verification pass. An isolated stock IPS image also passed the exact two-package upgrade from revision 16 to 18.

ConfigurationDriver and desktopInput checkResult
SeaBIOS VM, Xorg 1.19.7Automatic vesa, 1920×1200; same with 10-vesa.confUS; Y types y in both phasesPASS, job 82
OVMF UEFI VM, Xorg 1.19.7Automatic illumosfb, 1024×768; same when explicitly selectedUS; Y types y in both phasesPASS, job 83
Native bhyve VM, Xorg 1.19.7Automatic illumosfb, 1024×768; same when explicitly selectedUS; Y types y in both phasesPASS, job 84
X230 KMS, separate Xorg 21.1 companionConfigured modesetting; both displays unchangedUS map unchanged; synthetic Y types yPASS; con18 restored as the default

The X230 check used a matching 21.1 companion package. This download is for 1.19.7. Physical BIOS/CSM machines without a KMS driver are still wanted, especially the HP EliteBook 820 G2 case. The keyboard-layout report remains an open question; these checks do not establish its cause.

Download

From dlc.openindiana.org/isos/hipster/test/xorg-autodetect-rev18-20261021/

FilePurpose
xorg-autodetect-1.19.7-rev18-20261021.p5pThe package archive
xorg-autodetect-1.19.7-rev18-20261021.p5p.sha256sumIts SHA-256 checksum
README.mdThis guide as plain text

The archive contains exactly two packages for the standard openindiana.org publisher, so you do not need to add a publisher:

Both are Xorg userland packages. There are no kernel, driver or OS packages. xserver-common also ships Xorg’s mdb debugging module, which is not part of this test.

Before you start

Step 1: record the system as it is now

In a terminal in your desktop session:

as your user
echo "$DISPLAY"

This should print something like :0. If it prints nothing, or a name with a host such as localhost:10.0, you are not in the local desktop. The display queries below would then come out empty or describe the wrong screen.

as your user
D=~/xorg-test/before
mkdir -p "$D"
cd "$D"
echo "DISPLAY=$DISPLAY" > display.txt
xrandr --current > xrandr.txt 2>&1
setxkbmap -query > setxkbmap.txt 2>&1
svcprop -p keymap/layout system/keymap:default > console-keymap.txt 2>&1
pkg list -v x11/server/xorg x11/server/xserver-common > pkg.txt 2>&1
uname -v > uname.txt
prtconf -d | grep -i display > display-hw.txt 2>&1
ls -l /etc/X11/xorg.conf /etc/X11/xorg.conf.d /dev/dri > config.txt 2>&1
grep -i driver /etc/X11/xorg.conf /etc/X11/xorg.conf.d/*.conf > drivers.txt 2>&1
cp /var/log/Xorg.0.log .
grep -E 'console driver|illumos framebuffer|autoconfigured driver' Xorg.0.log

“Not found” lines in config.txt or drivers.txt are normal and useful.

Check pkg.txt. The version of both packages should start with 1.19.7 and contain 2026.0.0.16. Stop if either shows 21.1, or 2026.0.0.17 or later.

Then write down, in your own words:

On a default installation your home directory is shared by every BE, so ~/xorg-test stays available after a reboot. If you are not sure that is true for you, copy it to a USB stick before each reboot.

Step 2: download and verify

as your user
mkdir -p /var/tmp/xorg-rev18 && cd /var/tmp/xorg-rev18
curl -fLO https://dlc.openindiana.org/isos/hipster/test/xorg-autodetect-rev18-20261021/xorg-autodetect-1.19.7-rev18-20261021.p5p
curl -fLO https://dlc.openindiana.org/isos/hipster/test/xorg-autodetect-rev18-20261021/xorg-autodetect-1.19.7-rev18-20261021.p5p.sha256sum
F=xorg-autodetect-1.19.7-rev18-20261021.p5p
digest -a sha256 "$F"
cat "$F.sha256sum"
PACKAGE_SHA=$(digest -a sha256 "$F") &&
EXPECTED_SHA=$(awk 'NR == 1 {print $1}' "$F.sha256sum") &&
[ "${#PACKAGE_SHA}" -eq 64 ] &&
[ "$PACKAGE_SHA" = "$EXPECTED_SHA" ] && echo CHECKSUM OK

The two hashes must be identical and the last line must print CHECKSUM OK. If not, stop.

Step 3: check your boot environments and create the test BE

Open one root shell and keep it open until the reboot in step 6. The commands use shell variables that exist only in that shell.

as root
beadm list

Read the Active column. Continue only if exactly one BE is marked NR (running now and the default for the next boot), no other BE carries N, R or T, and that BE is the one you were happy with. Write its name on your paper as the original BE. Stop if the markers are split across BEs or if any T appears.

Type the original BE’s name exactly as beadm list shows it, then choose a name for the new test BE that does not exist yet (for example xorg-rev18-test):

as root
printf 'Original BE (marked NR): '; read ORIG
printf 'New test BE name: '; read TESTBE
beadm list "$ORIG"

That last command must show one row, marked NR. If it does not, set ORIG again. Write the test BE name on your paper too.

Create the test BE as a copy of the running original BE, and mount it:

as root
M=/mnt/xorg-rev18-test
mkdir "$M" &&
beadm create "$TESTBE" &&
beadm mount "$TESTBE" "$M" &&
echo "READY: $TESTBE mounted at $M"

If you do not see READY, stop. Do not reuse an existing directory or BE name.

Step 4: dry run in the test BE

Same shell. Everything here acts on the mounted test BE (-R "$M"). Your running system is not changed.

The Xorg packages are version-locked. Preview unlocking them in the test BE only:

as root
pkg -R "$M" change-facet -nv --deny-new-be --no-backup-be --no-be-activate \
    facet.version-lock.x11/server/xorg=false \
    facet.version-lock.x11/server/xserver-common=false

The preview should list only the two facet changes and no package changes. If it does, apply it:

as root
pkg -R "$M" change-facet -v --deny-new-be --no-backup-be --no-be-activate \
    facet.version-lock.x11/server/xorg=false \
    facet.version-lock.x11/server/xserver-common=false

Now preview the install. The dry run installs nothing:

as root
pkg -R "$M" install -nv --deny-new-be --no-backup-be --no-be-activate \
    -g /var/tmp/xorg-rev18/xorg-autodetect-1.19.7-rev18-20261021.p5p \
    'pkg://openindiana.org/x11/server/xorg@1.19.7,5.11-2026.0.0.18:20261021T173619Z' \
    'pkg://openindiana.org/x11/server/xserver-common@1.19.7,5.11-2026.0.0.18:20261021T173621Z'

Read the plan carefully. It must show exactly two changed packages, x11/server/xorg and x11/server/xserver-common, each going from a 2026.0.0.16 version to a 2026.0.0.18 version. It must not create a boot environment.

Stop if the plan:

In that case, do not try pkg update, --reject, other facets or publishers, and do not update or downgrade the OS. Save the output for your report, then unmount the test BE and leave it inactive:

as root
beadm unmount "$TESTBE"

Step 5: install into the test BE

Only if the dry run looked right. Use the same command without -n:

as root
pkg -R "$M" install -v --deny-new-be --no-backup-be --no-be-activate \
    -g /var/tmp/xorg-rev18/xorg-autodetect-1.19.7-rev18-20261021.p5p \
    'pkg://openindiana.org/x11/server/xorg@1.19.7,5.11-2026.0.0.18:20261021T173619Z' \
    'pkg://openindiana.org/x11/server/xserver-common@1.19.7,5.11-2026.0.0.18:20261021T173621Z'
pkg -R "$M" list -v x11/server/xorg x11/server/xserver-common

Both packages must now show a 2026.0.0.18 version.

Leave your Xorg configuration as it is, including 10-vesa.conf if you use it. The first test boot checks that your current setup still works. Step 8 offers an optional, separate comparison without it.

Unmount the test BE:

as root
beadm unmount "$TESTBE"

Step 6: switch to the test BE

Same shell. This makes the test BE the default for the next boot. It is a normal, permanent activation. Nothing will switch you back on its own. Step 9 switches you back.

as root
beadm activate "$TESTBE"
echo "beadm exit status: $?"
beadm list

Continue only if both of these are true:

  1. beadm activate printed no error and the exit status is 0;
  2. beadm list shows the original BE as N (running now) and the test BE as R (default next boot).

If beadm activate printed any error, or the status is not 0, stop here and do not reboot, even if the markers look right. Report the output. If the markers are anything other than described, do not reboot either.

Save your work, then reboot through the firmware and the boot menu:

as root
reboot -p

Step 7: record the system in the test BE

Log in as usual. Check where you are:

as root
beadm list

The test BE should be NR, and your original BE should still be listed. Note the output for your report.

Then, in a terminal in your desktop session, run the step 1 block again with a new directory. Change only the first line:

as your user
D=~/xorg-test/after

This time pkg.txt should show 2026.0.0.18 for both packages; the stop rule from step 1 does not apply here.

The last grep in that block shows the new console line. On an illumos_fb console, it is followed by one of:

illumos framebuffer: legacy video BIOS present; retaining vesa
illumos framebuffer: legacy video BIOS unknown; retaining vesa
illumos framebuffer: legacy video BIOS absent; using illumosfb fallback

If a configuration file names a driver, such as 10-vesa.conf, Xorg skips autodetection and none of these lines appears. That is expected.

Write down the resolution, screen sizes and arrangement, and keyboard behaviour (the Y and Z keys again) in the same words as before.

Step 8 (optional): try without 10-vesa.conf

Only if drivers.txt showed that you use /etc/X11/xorg.conf.d/10-vesa.conf, you are running the test BE (N on the test BE), and you can get to a root shell without the desktop: a text console or SSH from another machine. If you cannot, skip this step.

In the running test BE. This ends your desktop session, so save your work first:

as root
test ! -e /etc/X11/10-vesa.conf.parked &&
mv /etc/X11/xorg.conf.d/10-vesa.conf /etc/X11/10-vesa.conf.parked &&
echo PARKED

Continue only if you see PARKED. Then restart the login screen:

as root
svcadm restart lightdm

Log in and run the step 1 block once more with D=~/xorg-test/no-vesa-conf.

Afterwards, put the file back, whether or not the desktop came up:

as root
test ! -e /etc/X11/xorg.conf.d/10-vesa.conf &&
mv /etc/X11/10-vesa.conf.parked /etc/X11/xorg.conf.d/10-vesa.conf &&
echo RESTORED
as root
svcadm restart lightdm

If no login screen appears after parking, use your text console or SSH to run the two restore commands. This change exists only in the test BE. Your original BE is untouched.

Step 9: switch back to your original BE

Open a new root shell (the variables from step 3 are gone). Look at the list and set ORIG again from your paper:

as root
beadm list
printf 'Original BE (from your paper): '; read ORIG
beadm list "$ORIG"

The last command must show exactly that BE. Then make it the default again:

as root
beadm activate "$ORIG"
echo "beadm exit status: $?"
beadm list

Continue only if both are true:

  1. beadm activate printed no error and the exit status is 0;
  2. the original BE is marked R, and the test BE N (the one running now).

If beadm activate printed any error or the status is not 0, stop. Do not reboot, even if R looks right. Report the output. While you wait, you are still in a working test BE, and the boot menu can still start your original BE.

If both are true, reboot:

as root
reboot -p

Afterwards, beadm list as root should show your original BE as NR.

Keep both BEs. Please do not delete the test BE yet. It helps with follow-up questions.

If the test BE does not start properly

For example a black screen, no login screen, or a hang:

  1. Reboot or power-cycle the machine. It will start the test BE again, because that is now the default.
  2. In the boot menu, choose your original BE by name. In the illumos loader that is under Boot Environments; in GRUB it is an entry with the BE name. The menu is on the console and needs no desktop.
  3. Once the original BE is running, open a root shell and run both blocks of step 9, but not reboot -p. Here the second check in step 9 differs: because you are already running the original BE, expect it to show NR, and no marker on the test BE. The exit-status rule is unchanged. No further reboot is needed.

The same rule applies here: if beadm activate reports any error or a non-zero status, stop and report it, even if the markers look right.

Never delete either BE as part of recovery, and do not use temporary activation (beadm activate -t or -T) at any point in this test.

Reporting

Please comment on oi-userland#27965. If you have the HP EliteBook 820 G2, please also add your results to Redmine #18500.

Include:

“Nothing changed, everything works” is a useful report too, especially from pure UEFI and KMS machines.

Thank you for testing.