WineHQ

256 Color Mode: Difference between revisions

(Initial import; some markup fixes)
 
(rewrote to be more clear, point users towards workarounds that work, and drop outdated or minimally useful information)
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
The X server can't switch from 24bpp* mode to 8bpp** mode. Nevertheless, Wine (in general) can run software that uses 8bpp graphics by internally converting bitmaps to formats compatible with the current X server mode (e.g. 24bpp). This is also true for 8bpp DirectDraw games such as Starcraft, C&C Red Alert and Total Annihilation. Such games will output a fixme message
256-color displays that used 8 bits per pixel were commonplace in the 1990's. Each of the 256 colors was defined as a 24-bit value, so the operating system could choose an arbitrary palette of 256 colors from a selection of 16,777,216 colors. Nowadays, practically everything uses 24 bits per pixel, the video hardware has no palette, and each pixel is free to be any of the possible 16,777,216 colors. Nevertheless, some applications insist upon running in 256-color mode and refuse to run unless you reduce your display settings from 24bpp to 8bpp, which is rarely possible on modern hardware and software. If your application says that it needs 8bpp or 256 colors even though you have millions of colors available, you may be able to get it working with one of the workarounds below.


fixme:x11drv:X11DRV_desktop_SetCurrentMode Cannot change screen BPP from 32 to 8
== DxWnd ==
[https://sourceforge.net/projects/dxwnd/ DxWnd] is a remarkable tool for making old games work on new versions of Windows, and it works on Wine too! To get started, click Edit, then Add, and put the location of the misbehaving application's EXE file in the Path textbox. Depending on the application, some or all of the following settings may be helpful for forcing 256-color mode:


but for practical purposes it can be ignored. Although the general support for such conversion is there, there may be bugs affecting specific software, and performance is often not on par with native Windows installations. Search [http://bugs.winehq.org/query.cgi Bugzilla] and the [http://appdb.winehq.org/ AppDB] for known issues with individual applications.
* Video > Initial virtual color setting > 8 BPP
* Video > Initial virtual color setting > Lock
* GDI > Synchronize GDI to ddraw palette
* Hook > Do hook update


* "24bpp" = 24-bit color = 16 million colors = Truecolor
== X in X ==
It's possible to run an X11 server on top of an X11 server, for example running an 8bpp server for the misbehaving application on top of the 24bpp server you use for everything else. This solves the color mode problem, but your application still might not start because 3D acceleration won't be available in the nested server.


* "8bpp" = 8-bit color = 256 colors = color index mode
When using this approach, bear in mind:
* '''You must use a window manager''', and the window manager must be one that supports color palettes (e.g. [http://openbox.org/wiki/Main_Page Openbox]).
* Wherever <code>:1</code> is written you may use <code>:''n''</code> instead, where ''n'' is an unused display number. The default display is usually <code>:0</code>.
* If your shell doesn't accept the <code>DISPLAY=:1 wine explorer</code> syntax, you may need to use something like <code>env DISPLAY=:1 wine explorer</code> instead.


== Workarounds ==
=== Xephyr ===
Once you have installed [https://www.freedesktop.org/wiki/Software/Xephyr/ Xephyr] (Ubuntu: package xserver-xephyr, in universe), you should be able to run something like the following:


If your application says that it needs 8bpp or 256 colors even though you have millions of colors available, you may be able to get it working with one of the workarounds below. Any of four major methods are suggested to provide 8bpp to applications. These include:
  Xephyr :1 -ac -screen 800x600x8 &
 
DISPLAY=:1 openbox &
* Xephyr (preferred)
DISPLAY=:1 wine explorer
* Xnest
* VNC
* Xinit
* Change Preferences (Mac OS X only)
 
=== Stage 1: Creating a new X11 display ===
 
The instructions below allow you to create a new X11 display, with 256 colors, and with an xterm running within it. But:
* Wherever :1 is written you may use :''n'' instead, where ''n'' is an unused display number. The default display is usually :0.
* If your shell doesn't accept the <tt>DISPLAY=:1 xterm</tt> syntax, you may need to use something like <tt>env DISPLAY=:1 xterm</tt> instead.
* See also [http://bugs.winehq.org/show_bug.cgi?id=7334 bug 7334].
 
==== Xephyr ====
Once you have installed Xephyr (Ubuntu: package xserver-xephyr, in universe), you should be able to run something like the following:


Xephyr :1 -ac -screen 800x600x8 &
This will create a 800x600 display, in a window, with 8-bit color, and display a Wine file explorer in it.
DISPLAY=:1 xterm


This will create a 800x600 display, in a window, with 8-bit color, and display an xterm in it.
In some cases, you may get better results by starting Xephyr with the parameter <code>-cc 2</code> to use the default Xorg palette (StaticColor) instead of the default Windows palette (PseudoColor).


==== Xnest ====
=== Xnest ===
Once you have installed Xnest (Ubuntu: package xnest, in main), you should be able to run the following:
Once you have installed [https://www.x.org/archive/X11R7.5/doc/man/man1/Xnest.1.html Xnest] (Ubuntu: package xnest, in main), you should be able to run the following:


  Xnest :1 -depth 8 &
  Xnest :1 -depth 8 &
  DISPLAY=:1 xterm
  DISPLAY=:1 openbox &
DISPLAY=:1 wine explorer


This will create a display in a window, with 8-bit color, and display an xterm in it. Xnest depends on the parent X11 for various things; in some cases Xnest won't work (-depth 8 fails on many systems).
This will create a display in a window, with 8-bit color, and display a Wine file explorer in it. Xnest depends on the parent X11 server for various things; in some cases Xnest won't work (<code>-depth 8</code> fails on many systems).


==== VNC ====
== Native X ==
Once you have installed VNC (Ubuntu: packages vnc4server and xvnc4viewer, in universe), you should be able to run the following:
Of course you can use just plain ol' X, but that will only work if your video card and driver still support palettized 8bpp displays.


  vnc4server :1 -cc 3 -depth 8 -geometry 640x480 -localhost}
=== xinit ===
Then issue the command:
  xinit /usr/bin/xterm -- :1 -ac -depth 8


xvnc4viewer :1
Then in xterm:
This will create a virtual 8bpp display (in this example, a 640x480 window containing the virtual screen).  This is known as !PseudoColor mode in the VNC documentation.


==== Xinit ====
  openbox &
Of course you can use just plain ol' X, but that will only work if your modern video card still supports palettized 8bpp displays.
  wine explorer
 
  cd "~/.wine/drive_c/Program Files/My game/"
  xinit /usr/bin/wine "my game.exe" -- :1 -ac -depth 8
 
Or for something more sophisticated use xterm:
 
xinit /usr/bin/xterm -- :1 -ac -depth 8


You can switch between several running X servers and consoles by using the Ctrl+Alt+F1 ... Ctrl+Alt+F10 keyboard shortcuts. On Ubuntu, the initial X server is on tty7 (Ctrl+Alt+F7), and the new X server will be on tty9 (Ctrl+Alt+F9).
You can switch between several running X servers and consoles by using the Ctrl+Alt+F1 ... Ctrl+Alt+F10 keyboard shortcuts. On Ubuntu, the initial X server is on tty7 (Ctrl+Alt+F7), and the new X server will be on tty9 (Ctrl+Alt+F9).


Note: You may get a "user not authorized to run the X server, aborting" error message (this happens on Debian and Ubuntu). To work around this, either run xinit as root (or with sudo), or change the "allowed_users=console" line in /etc/X11/Xwrapper.config to read "allowed_users=anybody". If you run xinit as root, a root shell will be running in the xterm, so you need to start another xterm as your normal user (switch back to your main X server, and run {{{DISPLAY=:1 xterm}}} in a non-root shell). Remember: Don't run Wine as root!
Note: You may get a "user not authorized to run the X server, aborting" error message (this happens on Debian and Ubuntu). To work around this, either run xinit as root (or with sudo), or change the <code>allowed_users=console</code> line in /etc/X11/Xwrapper.config to read <code>allowed_users=anybody</code>. If you run xinit as root, a root shell will be running in the xterm, so you need to start another xterm as your normal user (switch back to your main X server, and run <code>DISPLAY=:1 xterm</code> in a non-root shell). Remember: Don't run Wine as root!


==== Change Preferences (Mac OS X only) ====
=== Mac OS X ===
The X server that ships with MacOS X has a preferences setting for the color depth, simply set it where you want it and restart the X server. Done.
The X server that ships with MacOS X has a preferences setting for the color depth, simply set it where you want it and restart the X server. Done.
=== Stage 2: Using the new display ===
To run commands in the xterm on the new display, you need to move the mouse cursor over its window (without a window manager, X11 uses focus-follows-mouse). It is a good idea to run the following commands in the new xterm, as the variable $DISPLAY will be set correctly. You can run commands from another terminal, but be sure to prepend "{{{DISPLAY=:1 }}}" to them.
First, you need a window manager.
metacity &
You can of course use another window manager, but note that compositing WMs like compiz may not work. The default background is either an eye-watering mesh pattern or a solid black. You can change it to gray with:
xsetroot -solid gray50
Instead of gray50, you can use any X11 color name or a hex color value rgb:''RR''/''GG''/''BB''. You can start Wine in the new display with:
cd "$HOME/.wine/drive_c/Program Files/<etc>"
wine <program> <etc>
When you're finished, you can close the new display. This will kill all programs that were running in it. If you used Xinit, type <tt>exit</tt> in the xterm that appeared initially.
----
----
[[Category:Graphics]]
[[Category:Graphics]]

Latest revision as of 06:37, 4 February 2024

256-color displays that used 8 bits per pixel were commonplace in the 1990's. Each of the 256 colors was defined as a 24-bit value, so the operating system could choose an arbitrary palette of 256 colors from a selection of 16,777,216 colors. Nowadays, practically everything uses 24 bits per pixel, the video hardware has no palette, and each pixel is free to be any of the possible 16,777,216 colors. Nevertheless, some applications insist upon running in 256-color mode and refuse to run unless you reduce your display settings from 24bpp to 8bpp, which is rarely possible on modern hardware and software. If your application says that it needs 8bpp or 256 colors even though you have millions of colors available, you may be able to get it working with one of the workarounds below.

DxWnd

DxWnd is a remarkable tool for making old games work on new versions of Windows, and it works on Wine too! To get started, click Edit, then Add, and put the location of the misbehaving application's EXE file in the Path textbox. Depending on the application, some or all of the following settings may be helpful for forcing 256-color mode:

  • Video > Initial virtual color setting > 8 BPP
  • Video > Initial virtual color setting > Lock
  • GDI > Synchronize GDI to ddraw palette
  • Hook > Do hook update

X in X

It's possible to run an X11 server on top of an X11 server, for example running an 8bpp server for the misbehaving application on top of the 24bpp server you use for everything else. This solves the color mode problem, but your application still might not start because 3D acceleration won't be available in the nested server.

When using this approach, bear in mind:

  • You must use a window manager, and the window manager must be one that supports color palettes (e.g. Openbox).
  • Wherever :1 is written you may use :n instead, where n is an unused display number. The default display is usually :0.
  • If your shell doesn't accept the DISPLAY=:1 wine explorer syntax, you may need to use something like env DISPLAY=:1 wine explorer instead.

Xephyr

Once you have installed Xephyr (Ubuntu: package xserver-xephyr, in universe), you should be able to run something like the following:

Xephyr :1 -ac -screen 800x600x8 &
DISPLAY=:1 openbox &
DISPLAY=:1 wine explorer

This will create a 800x600 display, in a window, with 8-bit color, and display a Wine file explorer in it.

In some cases, you may get better results by starting Xephyr with the parameter -cc 2 to use the default Xorg palette (StaticColor) instead of the default Windows palette (PseudoColor).

Xnest

Once you have installed Xnest (Ubuntu: package xnest, in main), you should be able to run the following:

Xnest :1 -depth 8 &
DISPLAY=:1 openbox &
DISPLAY=:1 wine explorer

This will create a display in a window, with 8-bit color, and display a Wine file explorer in it. Xnest depends on the parent X11 server for various things; in some cases Xnest won't work (-depth 8 fails on many systems).

Native X

Of course you can use just plain ol' X, but that will only work if your video card and driver still support palettized 8bpp displays.

xinit

xinit /usr/bin/xterm -- :1 -ac -depth 8

Then in xterm:

openbox &
wine explorer

You can switch between several running X servers and consoles by using the Ctrl+Alt+F1 ... Ctrl+Alt+F10 keyboard shortcuts. On Ubuntu, the initial X server is on tty7 (Ctrl+Alt+F7), and the new X server will be on tty9 (Ctrl+Alt+F9).

Note: You may get a "user not authorized to run the X server, aborting" error message (this happens on Debian and Ubuntu). To work around this, either run xinit as root (or with sudo), or change the allowed_users=console line in /etc/X11/Xwrapper.config to read allowed_users=anybody. If you run xinit as root, a root shell will be running in the xterm, so you need to start another xterm as your normal user (switch back to your main X server, and run DISPLAY=:1 xterm in a non-root shell). Remember: Don't run Wine as root!

Mac OS X

The X server that ships with MacOS X has a preferences setting for the color depth, simply set it where you want it and restart the X server. Done.


This page was last edited on 4 February 2024, at 06:37.