Display Drivers

From LinuxMCE
Jump to: navigation, search
Version Status Date Updated Updated By
710 Unknown N/A N/A
810 Unknown N/A N/A
1004 Unknown N/A N/A
1204 Unknown N/A N/A
Usage Information

An incomplete HowTo on updating LinuxMCE to the latest display drivers and configuring them manually. It could use your help, so if something is different in your situation, please add it.

Note that this should normally not be necessary unless you have specific wishes or trouble getting your display to work properly.

Installation

If the graphical environment cannot start you are likely to see a text screen blinking, this makes it very hard to login, if this is the case you can reboot into "recovery mode" by pressing [Esc] when GRUB tells you to during the boot process and then select it from the menu you will be presented with. Before you get started on the below, you will want to (from recovery mode) issue this command "cat /proc/interrupts" and make sure your video card is not sharing an interrupt with another device, such as a NIC (network interface card). If it is, you could run into a lot of issues. Your output should look something like this, with your Video Card not sharing an interrupt, as reflected below in line 21 where the Nvidia stands alone:

19: 38492811 0 IO-APIC-fasteoi eth0
20: 2 0 IO-APIC-fasteoi ehci_hcd:usb2
21: 10938712 0 IO-APIC-fasteoi nvidia

ATI Chipsets

The two main ways to install the ATI drivers are described in the Ubuntu Feisty Installation Guide.

For more information see also the Unofficial ATI Linux Driver Wiki and you might want to have a look at AtiProprietaryDriver in the MythTV wiki as well since LinuxMCE depends on it for viewing TV. MythTV in turn relies heavily on the support of certain features by the graphics drivers. The ATI drivers turn out to be a bit "challenged" in this area to say the least.

Installing The ATI Driver

Here's the procedure I use for setting up an ATI X1250 MD. Currently the the AVwizard in 0710 does not configure ATI cards properly so you need to to do some manual steps to get things working.

Step 1

Add the MD in the normal way (ie plug it into the network and let it add itself). Let it reboot and then it should run the AVwizard. Choose the options you want - output connector, resolution, refresh.... UI2 with Overlay etc etc and complete the wizard. Now the screen will return to a console screen and will after 5-10 mins will try to run the setup Wizard... but the setup Wizard will run very slowly and the video of 'Sarah' will not play smoothly. This is because the ATI drivers are not installed yet and the X driver is set to 'vesa'.

Step 2

From another machine ssh into the partially installed MD using Konsole from the KDE Desktop or a terminal app like Putty under Windows XP. Do the following from the console;

sudo su - <return>
ssh moonNN <return> (**where the NN is the device number for the MD we're configuring**)

Alternatively do the following from the MD/Core you are configuring;

Ctrl+Alt+2

Now login using the login you created when you installed your system ie When you ran the DVD installer or CD installer. Now we're logged into the MD we are configuring as 'root' and we can install the ATI drivers and configure Xorg.conf;

Firstly make sure our sources.list is up to date:

apt-get update <return>

Now lets install the ATI driver and packages;

apt-get install linux-restricted-modules-generic restricted-manager <return>

Answer 'Y' to installing new packages then do the following steps;

apt-get install xorg-driver-fglrx <return>
depmod -a <return>

So far so good... now we have the ATI drivers installed! (the current driver in the repos is not the latest ATI release an updated driver will be packaged soon though). Now we have to configure Xorg to use it! Do the steps below;

I use the console text editor 'joe' below but you can use whichever you prefer ('nano' is installed by default for example);

joe /etc/X11/xorg.conf <return>

Now you are editing the xorg.conf of your MD and the only change you need to make is to the 'Device' section. In the 'Device' section you will see a line thats says;

Driver          "vesa"

or

Driver          "ati"

Change the string 'vesa' (or ati) to 'fglrx' which is the name of the ATI driver. The updated driver line should look like below;

Driver          "fglrx"

Now save the changes you have made to xorg.conf.

Now reboot the MD from the console with;

reboot <return>

The MD will now reboot normally and the setup wizard will run again.... but this time the video and the Ui will run smoothly as the ATI driver is installed and confgured.

Currently the ATI driver will not support UI2 with transparency but it will support UI2 with overlay very nicely indeed. There are two small caveats to running UI2 with Overlay currently with the ATI driver in that the 'Compass Rose' on screen menu for selecting DVD chapters, Lighting levels etc etc and the 'Zoom & Aspect ratio' screen when playing Video do not draw correctly - the bit maps for the menus do not display but the menus do work.

NVidia Chipsets

Bugs

If you are here, trying to update your driver because video is not working, remember that there is a bug with some Nvidia cards that makes graphical output always appear on the DVI plug, not the VGA plug. If you have a display attached to the VGA port on your adapter, buy a DVI to VGA converter plug before putting yourself through a lot of pain!

Legacy Drivers

With legacy drivers the AVWizard might crash because it could not load the nvidia-legacy kernel module. It is unclear why kdm will start and not the AVWizard. A quick fix is to set the Driver option for the video card in the /etc/X11/xorg.conf file to vesa. Go through the AVWizard and then change it back. Another option is to edit /etc/modprobe.d/aliases and add alias nvidia nvidia-legacy. Don't forget about this line when you switch to a newer card.

Latest Drivers

There are several ways to install nVidia drivers, the way described here is meant as a guide to install the very latest drivers from the nVidia website. Note that this way will bypass the LinuxMCE (Kubuntu) packaging system, possibly removing and/or overwriting some of it's files.

1. Go to a console (text) terminal by holding [CTRL]-[ALT] and pressing the [F1] key simultaneously (Press [CTRL}-[ALT]-[F7} to return to the desktop.), log in with the user account you have created during the Kubuntu install and become root, if you haven't done so already.

<you>@dcerouter:~$ sudo -s

2. Download the latest linux drivers from NVidia (depending on your hardware, one of versions: 1XX.XX.XX, 1.0-96xx or 1.0-71XX), if you haven't done so already. When you have found the URL for downloading the package on the nvidia site you could download it like this:

root@dcerouter:~# wget http://us.download.nvidia.com/XFree86/Linux-x86/<version>/NVIDIA-Linux-x86-<version>-pkg1.run

3. Go to runlevel 1 to stop the currently running X-server.

root@dcerouter:~# telinit 1 

4. Execute the installer and follow instructions. a) Ignore the warning about runlevel 1 and b) don't bother looking for "precompiled kernel interfaces" (drivers).

root@dcerouter:~# sh NVIDIA-Linux-x86-<version>-pkg1.run

5. The installer will attempt to remove old legacy drivers. If it cannot, you may receive X errors (Eg. Error: API mismatch). The solution is to manually remove or disable the legacy drivers.

nano /etc/default/linux-restricted-modules-common 

Disable the NVIDIA linux-restricted kernel modules (nvidia, nvidia_legacy) by changing the DISABLED_MODULES line to read:

DISABLED_MODULES="nv nvidia_new"

6. Now it needs to be configured. The recommended and most convenient way is to use the AVWizard. For more advanced setup, or if the AVWizard for some reason is unable to set your up your screens to your liking, you can configure the X-server manually by editing the xorg.conf file directly.

** Update - Do a "sudo cat /proc/driver/nvidia/version" and make sure it reads something similar to this, matching the newest drivers you just installed: NVIDIA UNIX x86 Kernel Module 180.29. The "nvclock" utility is useful for monitoring GPU overheating

Note: My media director wouldn't launch X after I completed these steps. I had to run sh NVIDIA-Linux-x86-<version>-pkg1.run again from tty3. To get to tty3, press ctrl-alt-F3.

Still getting API mismatch? Try following the details here;

[1]

Intel Chipsets

There is a renewed interest in the Intel graphics chipsets since Intel released the drivers under the GPL. Currently the Intel driver still cannot support UI2 with Alphablending but they will support UI2 with Overlay very nicely and video performance is excellent. LinuxMCE versions after Beta4 have full support for configuring the Intel driver in the AVwizard.

From LinuxMCE-0710 Beta4 onwards LinuxMCE will install the newer intel driver by default - so the instructions below are only useful if your still running LinuxMCE-0704.

For LinuxMCE-0704

You will want to make sure you are using the newer intel drivers from http://packages.ubuntu.com/gutsy/i386/xserver-xorg-video-intel/download for i386. These replace the older i810, etc. drivers and should cover all the modern intel chipsets. The name for this driver is 'intel' and would replace the older 'i810' drivers.

If you're using i810 driver make sure you add Option "LinearAlloc" "8160" to xorg.conf or video players will crash with X11 error: BadAlloc.

From man i810:

  Option "LinearAlloc" "integer"
         Allows  more  memory  for  the offscreen allocator. This usually
         helps in situations where HDTV movies are required to  play  but
         not  enough  offscreen  memory is usually available. Set this to
         8160 for upto 1920x1080 HDTV support.  Default 0KB (off).

potential problem

there can be a problem with some intel drivers, like the gma 3100. see bug/gma3100driver for further informations

Via Chipsets

Use the Openchrome or Via Unichrome drivers. The Via Unichrome drivers can be downloaded from [2]

The proprietary Via Unichrome driver works best with Linux MCE. Unfortunately this driver has intentionally been stripped of support for most GLX extensions. This driver does not support alpha blending which is a prerequisite of UI2. Via licenses the full featured driver to system integrators, such as Fiire. This licensed driver is not publicly available. Additionally there is a known incompatibility issue with the licensed driver and Linux MCE 0710.

On April 08, 2008 Via announced a new open source initiative to help develop open drivers for certain video chipsets [3]. This press release echos sour notes with many developers who have heard this tune many times before. No useful information or code has been released to date, striking yet another all to familiar chord in the open source community [4].

HOW-TO VIA Openchrome driver for xorg:
For VIA CX700M2 UniChrome PRO II Graphics (1" VIA units) or mainly via graphics:

shell into your box and do the following:

 apt-get -y install build-essential automake1.9 libtool x11proto-* libgl1-mesa-dev makedepend libxxf86vm-dev libexpat1-dev libexpat1 libxmu-dev xtrans-dev libpng12-dev libxcomposite-dev libxfixes-dev libxdamage-dev libxrandr-dev libxrender-dev libstartup-notification0-dev libgconf2-dev subversion xserver-xorg-dev libdrm-dev libxvmc-dev
cd /usr/src
svn checkout http://svn.openchrome.org/svn/trunk openchrome
cd openchrome*
./autogen.sh --prefix=/usr
make
make install

Now we have to edit /etc/X11/xorg.conf and change the device driver to via openchrome:

vi /etc/X11/xorg.conf

Go to

Section "Device"

and change

Driver "vesa" 

to

Driver "openchrome"

save and test the compiled new driver with a:

X :1

and if your xwindow comes up, you can reboot and have fun

Other Chipsets

Please help out by adding more if you can.

Configuration

The recommended and most convenient way is to use the AVWizard. For more advanced setup, or if the X-server (and thus also the AVWizard) is unable to start, you can configure the X-server manually by editing the xorg.conf file directly.

Getting started

Start by making a backup copy of the /etc/X11/xorg.conf file (even if it doesn't work it might contain settings you could need). In this example we will start from scratch and edit the configuration file step by step to get the main display setup.

Some of these steps require that there will be no X-server active on the system, the easiest way to achieve this is to boot in rescue-mode, just hit [Esc] when Grub tells you to during the startup of your machine and select the right line from the menu. Another way is to go to a text-mode console (aka. terminal) with [CTRL]-[ALT]-[F1], log in, become root and issue the command:

telinit 1

This wil stop the running X-server and drop you into rescue mode as well.

One of the advantages is that now you can start and stop the X-server by hand with an alternative configuration file and without having to reboot or even start an entire desktop environment.

Generating a template

These instructions were originally written for ATI chipsets, so they might need to be adjusted and updated a bit. Not all of the specific options may be relevant for your chipset.

While there is no (other) X-server running you can create a template configuration file by running:

X -configure

This will create a file called xorg.conf.new in your home directory, test it with the following command and hit [CTRL]-[ALT]-[Backspace] when done:

X -config ~/xorg.conf.new

Within a few seconds a gray bitpattern should show up with an 'X' shaped mouse cursor. If the screen is distorted or reports the refresh rate to be out of range then you will either have to specify the proper refreshrate limitations for your screen or insert "modelines" for the resolution(s) you want to use (see below).

When you're satisfied you can overwrite /etc/X11/xorg.conf with this file to make it the default (you did make a backup didn't you?), once you have done that you can use "startx" to test and have the use of your desktop as well. This should at least be enough to allow the use of a graphic configuration tool (like the AVWizard for instance) to set up your display further. More advanced manual configuration options can be found below.

Here is an example of such a generated file:

Section "ServerLayout"
       Identifier     "X.org Configured"
       Screen      0  "Screen0" 0 0
       InputDevice    "Mouse0" "CorePointer"
       InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
       RgbPath      "/etc/X11/rgb"
       ModulePath   "/usr/lib/xorg/modules"
       FontPath     "/usr/share/fonts/X11/misc"
       FontPath     "/usr/X11R6/lib/X11/fonts/misc"
       FontPath     "/usr/share/fonts/X11/cyrillic"
       FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
       FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
       FontPath     "/usr/share/fonts/X11/Type1"
       FontPath     "/usr/X11R6/lib/X11/fonts/Type1"
       FontPath     "/usr/share/fonts/X11/100dpi"
       FontPath     "/usr/share/fonts/X11/75dpi"
       FontPath     "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection

Section "Module"
       Load  "extmod"
       Load  "record"
       Load  "xtrap"
       Load  "dri"
       Load  "glx"
       Load  "dbe"
       Load  "GLcore"
       Load  "type1"
EndSection

Section "InputDevice"
       Identifier  "Keyboard0"
       Driver      "kbd"
EndSection

Section "InputDevice"
       Identifier  "Mouse0"
       Driver      "mouse"
       Option      "Protocol" "auto"
       Option      "Device" "/dev/input/mice"
       Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
       Identifier   "Monitor0"
       VendorName   "Monitor Vendor"
       ModelName    "Monitor Model"
EndSection

Section "Device"
       ### Available Driver options are:-
       ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
       ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
       ### [arg]: arg optional
       #Option     "ShadowFB"                  # [<bool>]
       #Option     "DefaultRefresh"            # [<bool>]
       #Option     "ModeSetClearScreen"        # [<bool>]
       Identifier  "Card0"
       Driver      "vesa"
       VendorName  "ATI Technologies Inc"
       BoardName   "ATI Radeon Xpress 1200 Series"
       BusID       "PCI:1:5:0"
EndSection

Section "Screen"
       Identifier "Screen0"
       Device     "Card0"
       Monitor    "Monitor0"
       SubSection "Display"
               Viewport   0 0
               Depth     1
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     4
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     8
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     15
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     16
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     24
       EndSubSection
EndSection

Note that the only thing really specific to my setup in this config file is BusID, if you only have one graphics adapter in your system this value can be omitted, otherwise the value(s) can be found with:

X -scanpci

Where each card will need it's own Device Section in the config file. The "VendorName" and "BoardName" settings are just labels and serve no real purpose other then being able to identify this particular device, which is usefull if you have more then one.

We'll be using this sample configuration as a starting point in the other examples below, the comments (lines starting with # can be safely removed as well as the "Display" subsections for the colordepths we don't plan on using.

Refresh rate / ModeLine

The easiest way to sort this problem is to let the X-server figure this out by not specifying the limits of your screen. However this often fails, leaving you with an unusable display. Simply look up your screen's refresh rates in the documentation and add them like this:

Section "Monitor"
       Identifier   "Monitor0"
       VendorName   "Monitor Vendor"
       ModelName    "Monitor Model"
       HorizSync     27-102 # kHz
       VertRefresh   50-160 # Hz
EndSection

Alternatively you could specify a "ModeLine" for each resolution you want to use. By using ModeLines you have much finer controll over the timings of the output signal generated by your videocard. The drawback is that the timing values can be hard to get right.

Search the web for a "modeline generator", and many of these will include instructions on how to add the modeline, but briefly, you just add it to the "Monitor" section. Read the wikipedia entry to learn how to use modelines.

If one modeline doesn't work perfectly, try another, perhaps from another generator, because they can vary so much.

Using the wrong timings could in some (nowadays rare) occasions damage the hardware of your screen, so if it looks garbeled don't leave it like that for hours on end but hit [Ctrl]-[Alt]-[←Backspace] and readjust your settings. Most modern screens however simply report that the signal is out of range if this happens.

Colordepth and resolution

Specify the colordepth and resolution(s) you would like to use, like this:

Section "Screen"
       Identifier   "Screen0"
       Device       "Card0"
       Monitor      "Monitor0"
       DefaultDepth 24
       SubSection "Display"
               Viewport   0 0
               Depth      24
               Virtual    1600 1200
               Modes      "1600x1200" "1280x1024" "1024x768" "800x600" "640x480" "512x384" "400x300" "320x240"
       EndSubSection
EndSection

As most people will only be using 24 bits anyway, I have removed the other redundant subsections. "Virtual" is the size of your desktop and "Modes" are physical resolutions, you can flip through these by holding [CTRL]-[ALT] and pressing the plus or minus on the numeric keypad. These are just examples, most people will only want to specify the resolution they actually use.

DRI device permissions

This section is needed to have the X-server set the proper permissions on the DRI device during startup. Simply add it to the end of the /etx/X11.xorg file if it isn't there already.

Section "DRI"
       Mode         0666
EndSection

Chipset driver

Change "vesa" to "fglrx" (or "ati", depending on which drivers you installed earlier), as shown below, the old line is left as a comment in this example for clarity, but it's better to remove it as some scripts seem to find it confusing. For Nvidia chipsets use nvidia or nv as the driver names (instead of fglrx).

Section "Device"
       Identifier  "Card0"
#      Driver      "vesa"
       Driver      "fglrx"
       VendorName  "ATI Technologies Inc"
       BoardName   "ATI Radeon Xpress 1200 Series"
       BusID       "PCI:1:5:0"
EndSection

If your X-server was running you will have to restart it completely for the changes to take effect, the easiest and most thorough way to do this is to reboot.

Physical display size

Like specifying the refresh rate his is optional but sometimes necessary, most of the time it is either detected or some sane defaults are used but sometimes it isn't, which can result in unreadable font sizes.

Section "Monitor"
  ...
  DisplaySize 155 95
EndSection

Where you have to replace the numbers with the physical width and height of your screen in millimeters (1" = 25mm), feel free to try mine, however these are for a small touchscreen.

Disable composite

Aparently the ATI fglrx driver does not yet support composite with DRI. So if you are using the fglrx driver, disable it by adding this to the end of the /etx/X11.xorg file if it isn't there already.

Section "Extensions"
       Option      "Composite" "Disable"
EndSection

Additional options

To be continued, I don't think this is enough to get UI2 completely (either mode) going yet. Feel free to jump in anytime...


Things still to sort out amongst others (i.e. what is it, do we need it and what are the settings if any):

Section "Module"
       Load  "i2c"
       Load  "bitmap"
       Load  "ddc"
       Load  "freetype"
       Load  "int10"
       Load  "vbe"
       Load  "speedo"
       Load  "type1"
       Load  "dbe"
       Load  "glx"
       Load  "v4l"
EndSection
Section "ServerFlags"
       Option "AIGLX" "off"
EndSection
Section "Extensions"
       Option      "Composite" "Disable"
#      Option      "RENDER" "true"
EndSection
       Option      "PseudoColorVisuals" "off"
       Option      "OpenGLOverlay" "off"
       Option      "VideoOverlay" "off"
       Option      "DesktopSetup" "clone"

TV-out options, 2nd display, etc.


Troubleshooting

The AVWizard crashes X-windows

Try setting the #Chipset_driver option to vesa, run the AVWizard again and then change the driver back to what it was.

Black screen

  • Screen is black, after install seemed to go okay. You may have even seen the Kubuntu splash screen. See AVWizard on how to select the proper output.
  • One problem on nvidia-cards could be that it does not detect the right monitor.
Go to Console 1 ([Ctrl]+[Alt]+1) and edit /etc/X11/xorg.conf (nano -w /etc/X11/xorg.conf). Find the section ::Device with the driver nvidia add the line
Option "ConnectedMonitor" "XXX"
where XXX is CRT, CRT-0, CRT-1, DVI-0, DVI-1, ...
Save and exit (nano: Ctrl+x) and restart the computer. In my case it was "CRT-1".

X-windows won't start

Reboot into rescue-mode if needed (hit [Esc] when Grub tells you to), and restore a working copy of your /etc/X11/xorg.conf, or edit it by hand to fix the problem. Test it with the command "X" and press [Ctrl]-[Alt]-[←Backspace] simultaneous to quit (alternative: use "startx" and get the full desktop, if any), then reboot when it works and you're done.

Signal out of range

See #Refresh rate / ModeLine above.

Microscopic fonts in KDE

See #Physical_display_size above.

If the above does not work, probably Xorg is calculating the DPI value in the wrong way. This can be verified by having a look at the file /var/log/Xorg.0.log related to the MD with this issue searching for the line containing "DPI set to (x , y)",where x and y are values that apply to the specific display.

If those values are too small, fonts will be displayed accordingly (i.e, VERY small)

A workaround is to force Xorg to startup with a given DPI value.

To achieve this the following steps are required:

  • edit the file /usr/pluto/bin/Start_X_Wrapper.sh on your MD where you are facing the font problem
  • find the line beginning with xinit
  • add "-dpi 96" (without quotes) at the end of this line
  • save the file and reboot MD

Obviously it is possible to set DPI to something different than 96, according to specific needs.

Please note that after an LMCE update the startup script may be replaced by new ones, so the above workaround may have to be re-applied in order to keep fonts at the desired dimension.

LinuxMCE keeps reconfiguring my display settings

Add a line containing exit to the top of the /usr/pluto/bin/Xconfigure.sh file. After you do this you may experience difficulties running the AVWizard again, if so remove this line and add it back again after the wizard is finished.

For LinuxMCE 710 simply comment out the line that says

  . /usr/pluto/bin/X-CleanupVideo.sh

This is the command that gets run that modifies the xorg.conf file on startup. This is different than above because if you put exit at the top your display will not get initialized. And as above if you want to run the AVWizard you will need to uncomment this line.

See also