"; */ ?>

howto


2
Jun 07

Switch Between Dual/Single Monitor on (Ubuntu) Linux

xorg logo ubuntuRecently I wrote a howto on dual monitor configuration, which works great for my setup. However one thing that is not that great is switching between two modes: dual and single monitor. At work I have an external monitor that I use (which means I use two monitors – my laptop’s and external one), but whenever I am not at work I only need to use my laptop’s. Since all the xorg configuration resides in xorg.conf file, and this file is a regular static text file that is used by X (window system – gdm, kdm, etc.) when it starts, it is nontrivial to change this configuration while running X without some X tools. Unfortunately, Ubuntu is not that fancy (yet) and does not provide these tools by default, so here is a way to do it (sort of) manually.

What we can do is to create two xorg.conf files – "xorg.conf.single" and "xorg.conf.dual". In "xorg.conf.single" just comment out the following line from ServerLayout section:

# /etc/X11/xorg.conf (xorg X Window System server configuration file)
#
.....
Section "ServerLayout"
        Identifier      "Default Layout"
        Screen          0 "0 Screen"
        #Screen         1 "1 Screen" Above "0 Screen"   <-- comment out this line
        Option          "Xinerama" "on"
        Option          "Clone" "off"
.....
EndSection

Here is the listing of "xorg" files that I have:

user@host:/etc/X11$ ll xorg.conf*
-rw-r--r-- 1 root root 4457 2007-06-02 15:05 xorg.conf
-rw-r--r-- 1 root root 4456 2007-05-22 22:03 xorg.conf.dual
-rw-r--r-- 1 root root 4457 2007-05-22 22:04 xorg.conf.single

Now the idea is simple - before X (I use Gnome Desktop, but it can be any desktop environment) starts, we need to copy xorg file that we need (dual or single) to "xorg.conf", which will be picked and loaded by X.

In /home/user/ directory we have a .bashrc file that is loaded whenever the user logs in (if we use bash shell, which is a most popular shell anyway). Therefore we can leverage this file to define aliases that we would like to use once we login. Since alias can be anything we'd like, why not make a dual/single commands as aliases? Here is an example:

user@host:/etc/X11$ tail -5 /home/user/.bashrc
# restart gdm with dual monitor support
alias xdual='sudo cp /etc/X11/xorg.conf.dual /etc/X11/xorg.conf; sudo /etc/init.d/gdm restart'

# restart gdm with single monitor support
alias xsingle='sudo cp /etc/X11/xorg.conf.single /etc/X11/xorg.conf; sudo /etc/init.d/gdm restart'

Now when we need to switch between dual/single monitor, we can fire up shell (by pressing Ctrl+Alt+1, or gnome-terminal, or kterm, etc.) and type xsingle or xdual whichever we need.


18
May 07

Dual Monitor on Ubuntu 7.04 (Feisty Fawn) – nc2400 with Intel 945GM

xorg logoOne 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?


16
May 07

Hacking Aproach: NVIDIA Driver on Ubuntu 7.04 Feisty Fawn

nvidia driver ubuntuNeeded to install Nvidia driver for my Feisty Fawn (Ubuntu 7.04) box. Googled for a "how to". Noticed that all "how to"s in www follow one of three scenarios:

"Here is a tutorial on how to install Nvidia Driver…":

  • Make sure you know whether you card belongs to "1.0-71xx series" or "1.0-96xx series"
  • Get the driver’s installer  from nvidia site
  • Run the installer
  • Change the device driver from ‘nv’ to ‘nvidia’ in xorg.conf
  • You’re good to go"

                      OR

  • # sudo apt-get install nvidia-glx nvidia-kernel-common
  • # sudo nvidia-glx-config enable
  • You’re good to go

                      OR

  • Download this envy script
  • Run it
  • You’re good to go

    As you can see, there are multiple ways in Linux to solve a single problem, and it is wonderful, besides when none of them work. Yea, none of the above worked for me. I either had "GPU version mismatch – The 1.0-9755 NVIDIA driver will ignore (WW) NVIDIA(0): this GPU." or "Failed to load nvidia kernel module" or that "envy" stuff that said "my OS is not supported", etc..

I solved the problem and just wanted to share with everybody out there who might struggle, so you don’t.

I took a very "dirty approach" and did the following:

I knew my card falls into "1.0-96xx series" list by nvidia, so I went there and downloaded that installer.

Then I did:   sudo rm -rf `locate nvidia`   to make sure I have NO traces of any kind of nvidia stuff that came (?) with a clean Feisty install. (if locatedb is not populated, you can do   sudo find / -name "*nvidia*" -exec rm -rf {} \;   this will definitely clean your system from all nvidia guests)

Make sure if you have copied your driver to the directory with (or part of a) name "nvidia" rename it before deleting all the "nvidia" pieces:   mv nvidia/ myvidia/)

And only then, after I ran the installer from "nvidia", my GeForce MX 400 smiled broadly :)

Happy hacking!


13
May 07

Configure Spell Check with FCKEditor Plugin for WordPress

fck editor logo

FCKEditor plugin is a very useful plugin for WordPress – no doubt about that. However spell check integration with this plugin takes a bit of hands on if you host your blog from non-Windows OS, and edit your posts with non-Microsoft Internet Browser (IE). Yes, Windows/IE are defaults that FCKEditor plugin comes with.

Below "how to" will guide you step-by-step on integrating spell checking capabilities with FCKEditor. Here I used Ubuntu Linux OS as an example, but these instructions are good for any Linux distro just replace Ubuntu’s "apt-get install" with analog in your Linux OS.

1.     First thing first, in order to integrate a spell checker we will NEED a spell checker. For that we will install "aspell", and appropriate (English, in this case) dictionary "aspell-en". There is an 85% percent chance that if you have a Linux OS installed, you have aspell. You can just search for it, or try to run it to see if you do. If you don’t then install it by:

sudo apt-get install aspell

At this point (whether you just installed it or had already installed) try to run it like this:

echo "I mispeled it" | /usr/bin/aspell -a --lang=en_US --encoding=utf-8 -H

If there is no English dictionary installed you should see:

Error: No word lists can be found for the language "en_US".
-bash: echo: write error: Broken pipe

Let’s fix that by installing the dictionary:

sudo apt-get install aspell-en

Now if you run the command above, you should see aspell looking up "mispeled" in its aspell-en dictionary, identifying that it is spelled wrong, and offering you choices of correct spelling from that dictionary:

echo "I mispeled it" | /usr/bin/aspell -a --lang=en_US --encoding=utf-8 -H
@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.4)
* * * & mispeled 16 21: misspelled, misapplied, misled, dispelled, misfiled, misruled, mislead, spelled, spieled, misplaced, misplayed, misspell, misfield, misspend, simpled, misplay

Ok, so from Linux side, we are ready with Aspell, now let’s begin the integration.

2.   From WordPress FCKEditor’s plugin directory open
"wp-content/plugins/deans_fckeditor/custom_config_js.php" file* and set the following variable:

FCKConfig.SpellChecker = 'SpellerPages';

If you already have this variable set to something different, like "IESpell", just replace it with "SpellerPages"

This will do two things: it will redirect all the spelling requests to
"wp-content/plugins/deans_fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php", and, since "spellerchecker.php" exists (comes with plugin) it will enable the spell checker button:

fck editor toolbar

*NOTE: Depending on a version of the plugin, the file to edit might be "fckconfig.js" or "fckconfig_js.php"

3.   Almost there. The last thing to do is to tell "SpellerPages" to use Linux’s aspell, since by default it is configured to use it on Windows OS. For that edit
"wp-content/plugins/deans_fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellcheker.php" by setting "$aspell_prog" variable to ‘aspell’ instead of "C:\Program Files\Aspell\bin\aspell.exe". That is what it should look like after you make a change (comment/uncomment):

//$aspell_prog  = '"C:\Program Files\Aspell\bin\aspell.exe"';   // by FredCK (for Windows)
$aspell_prog    = 'aspell';                                                        // by FredCK (for Linux)

Good job! Now you can login to your WordPress blog and enjoy the spell checking capabilities within your FCKEditor!


16
Apr 07

Sexy TOP vs Human HTOP

To check performance of the Unix/Linux box top command is used frequently. This is what top‘s output usually looks like:

 top command on Ubuntu Linux

     While top command is very useful, it has very clumsy "human interface". There is a much better alternative to tophtop which is a free (GPL) ncurses-based process viewer. It is similar to top, but allows to scroll the list vertically and horizontally to see all processes and their full command lines. Tasks related to processes (killing, renicing) can be done without entering their PIDs, and of course htop has a much better human interface that looks similar to:

htop command on Ubuntu Linux

Comparison between htop and top

  • In ‘htop’ you can scroll the list vertically and horizontally to see all processes and complete command lines.
  • In ‘top’ you are subject to a delay for each unassigned key you press (especially annoying when multi-key escape sequences are triggered by accident).
  • ‘htop’ starts faster (‘top’ seems to collect data for a while before displaying anything).
  • In ‘htop’ you don’t need to type the process number to kill a process, in ‘top’ you do.
  • In ‘htop’ you don’t need to type the process number or the priority value to renice a process, in ‘top’ you do.
  • ‘htop’ supports mouse operation, ‘top’ doesn’t
  • ‘top’ is older, hence, more used and tested

    htop is an Open Source project, hence can be easily downloaded and installed on U/Linux system. For example it can be downloaded and installed on Ubuntu with just one command:

sudo apt-get install htop

Be aware!    It appears that although ‘htop’ provides some cool enhancements, ‘top’ remains to be one of the sexiest Unix commands ever according to GOOGLE. Just search for "man top" and along with "Unix Manual Pages for top" get "Man on Top Sex Positions" from GOOGLE. :)