One of the good things about being in a big consulting company is that you get these "once every one/two years" laptop upgrades. So my lucky upgrade day was yesterday, and my friend Dell D400 was upgraded to HP nc2400. So I decided to change my course a little, and use Ubuntu on a company laptop (instead of XP). I talked to the company people, they did not mind, which was great! The only problem is, when you get a new Windows XP laptop (upgrade), there are certain people that set it up for you, and you just pick it up and go to the client. Well, in my case I had to get up to speed very quickly myself. And of course one of majors problems with Ubuntu Feisty (as with most Linux distros) it does not have any tooling to deal with dual (laptop/LCD) monitors. So it was a fun time experimenting with "xorg.config". It took me quite some time, but I DID GET IT WORKING! And just want to share with everybody what I came with, since none of the Ubuntu forums, and none of what Google (with their new Web 2.0) told me did NOT work.
So here we go… Checking what graphic (video) my new nc2400 has:
user@host:~$ lspci ... 00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03) 00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03)<br /> ... |
Ok, so I’ve got "Intel 945GM" – cool. Notice that there are two VGA/Display controllers, one is on 0:2:0, and another one is on 0:2:1 (those numbers are BusIDs by the way). Nevertheless, I used only one BusID, which is the first one 0:2:0 to get it working.
I also have 1280×800 laptop screen resolution, which means I need to get 915resolution
apt-get install 915resolution |
Now, my External Monitor has 1280×1024 @ 60 Hz by specs. Let’s see it is supported by 915resolution:
user@host:~$ sudo 915resolution -l Password: Intel 800/900 Series VBIOS Hack : version 0.5.2 Chipset: 945GM BIOS: TYPE 1 Mode Table Offset: $C0000 + $269 Mode Table Entries: 36 Mode 30 : 640x480, 8 bits/pixel Mode 32 : 800x600, 8 bits/pixel Mode 34 : 1024x768, 8 bits/pixel Mode 38 : 1280x800, 24 bits/pixel Mode 3c : 1920x1440, 8 bits/pixel Mode 41 : 640x480, 16 bits/pixel Mode 43 : 800x600, 16 bits/pixel Mode 45 : 1024x768, 16 bits/pixel Mode 49 : 1280x800, 16 bits/pixel Mode 4d : 1920x1440, 16 bits/pixel Mode 50 : 640x480, 32 bits/pixel Mode 52 : 800x600, 32 bits/pixel Mode 54 : 1024x768, 32 bits/pixel Mode 58 : 1280x800, 32 bits/pixel Mode 5c : 1920x1440, 32 bits/pixel |
Seems like I do not have 1280×1024 as one of the supported modes. Hmmm. Ok, then I need to explicitly ask for it by modifying this file, to look like this:
user@host:~$ cat /etc/default/915resolution # # 915resolution default # # find free modes by /usr/sbin/915resolution -l # and set it to MODE or set to 'MODE=auto' # # With 'auto' detection, the panel-size will be fetched from the VBE # BIOS if possible and the highest-numbered mode in each bit-depth # will be overwritten with the detected panel-size. MODE=3a # # and set resolutions for the mode. # e.g. use XRESO=1024 and YRESO=768 XRESO=1280 YRESO=1024 # We can also set the pixel mode. # e.g. use BIT=32 # Please note that this is optional, # you can also leave this value blank. BIT=24 |
Ok. No I still need to patch laptop LCD to 1280×800, therefore im going to write a one liner script that is going to do that on startup (how-to). Here is that one line:
# Set the laptop monitor resolution # Add it to 915Resolution supported modes 915resolution 38 1280 800 24 |
Did, resolution, did the patching, is it now time for an "xorg.conf"? Ok, then, here it is (working too) :)
# /etc/X11/xorg.conf (xorg X Window System server configuration file) # # This file was generated by dexconf, the Debian X Configuration tool, using # values from the debconf database. # # Edit this file with caution, and see the xorg.conf(5) manual page. # (Type "man xorg.conf" at the shell prompt.) # # This file is automatically updated on xserver-xorg package upgrades *only* # if it has not been modified since the last upgrade of the xserver-xorg # package. # # If you have edited this file but would like it to be automatically updated # again, run the following command: # sudo dpkg-reconfigure -phigh xserver-xorg Section "Files" FontPath "/usr/share/fonts/X11/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/share/fonts/X11/100dpi" FontPath "/usr/share/fonts/X11/75dpi" # path to defoma fonts FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" EndSection Section "Module" Load "i2c" Load "bitmap" Load "ddc" Load "dri" Load "extmod" Load "freetype" Load "glx" Load "int10" Load "vbe" EndSection Section "InputDevice" Identifier "Generic Keyboard" Driver "kbd" Option "CoreKeyboard" Option "XkbRules" "xorg" Option "XkbModel" "pc105" Option "XkbLayout" "us" EndSection Section "InputDevice" Identifier "Configured Mouse" Driver "mouse" Option "CorePointer" Option "Device" "/dev/input/mice" Option "Protocol" "ImPS/2" Option "ZAxisMapping" "4 5" Option "Emulate3Buttons" "true" EndSection Section "InputDevice" Identifier "Synaptics Touchpad" Driver "synaptics" Option "SendCoreEvents" "true" Option "Device" "/dev/psaux" Option "Protocol" "auto-dev" Option "HorizScrollDelta" "0" EndSection Section "InputDevice" Driver "wacom" Identifier "stylus" Option "Device" "/dev/input/wacom" Option "Type" "stylus" Option "ForceDevice" "ISDV4" # Tablet PC ONLY EndSection Section "InputDevice" Driver "wacom" Identifier "eraser" Option "Device" "/dev/input/wacom" Option "Type" "eraser" Option "ForceDevice" "ISDV4" # Tablet PC ONLY EndSection Section "InputDevice" Driver "wacom" Identifier "cursor" Option "Device" "/dev/input/wacom" Option "Type" "cursor" Option "ForceDevice" "ISDV4" # Tablet PC ONLY EndSection Section "Device" Identifier "0 Intel 945GM" Driver "i810" BusID "PCI:0:2:0" Screen 0 Option "MonitorLayout" "CRT,LFP" Option "DRI" "false" # I don't think these next lines are actually required. #Option "BackingStore" "true" #Option "DevicePresence" "on" #Option "DisplayInfo" "FALSE" #Option "DRI" "true" #Option "CacheLines" "1024" EndSection Section "Device" Identifier "1 Intel 945GM" Driver "i810" BusID "PCI:0:2:0" Screen 1 Option "MonitorLayout" "CRT,LFP" Option "DRI" "true" # I don't think these next lines are actually required. #Option "BackingStore" "true" #Option "DevicePresence" "on" #Option "DisplayInfo" "FALSE" #Option "DRI" "true" #Option "CacheLines" "1024" EndSection Section "Monitor" Identifier "0 nc2400 Monitor" Option "DPMS" Option "DPMS" # HorizSync 28-75 # VertRefresh 43-100 EndSection Section "Monitor" Identifier "1 nc2400 Monitor" HorizSync 30 - 83 VertRefresh 56 - 76 Option "DPMS" Modeline "1280x1024@60" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync EndSection Section "Screen" Identifier "0 Screen" Device "0 Intel 945GM" Monitor "0 nc2400 Monitor" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1280x800" EndSubSection EndSection Section "Screen" Identifier "1 Screen" Device "1 Intel 945GM" Monitor "1 nc2400 Monitor" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1280x1024@60" EndSubSection EndSection Section "ServerLayout" Identifier "Default Layout" Screen 0 "0 Screen" Screen 1 "1 Screen" RightOf "0 Screen" Option "Xinerama" "on" Option "Clone" "off" InputDevice "Generic Keyboard" InputDevice "Configured Mouse" InputDevice "stylus" "SendCoreEvents" InputDevice "cursor" "SendCoreEvents" InputDevice "eraser" "SendCoreEvents" InputDevice "Synaptics Touchpad" EndSection Section "DRI" Mode 0666 EndSection |
You may notice "Modeline "1280×1024@60" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync", well I just got it from the same place you would get it, yea..that’s right, I got it from Google.
Remember, no matter what a general opinion is (linux follows "install without restart" philosophy), you have to restart. And not just /etc/init.d/gdm restart, but a FULL system restart,
Ok, so now you should see two beautiful screens – one is your laptop, and the other one is your external monitor which is now a separate screen. Congrats!
If you have any questions – shoot, I killed so much time figuring out all these details, why should you?