Monday, May 31, 2010

Translation Memory Software

Desktop translation memory tools are typically what individual translators use to complete translations. They are a specialized tool for translation in the same way that a word processor is a specialized tool for writing.

Free and Open Source Software (FOSS)

  • OmegaT+, cross-platform computer assisted translation tool suite. No language limitation (source and target), directly supports MS Office 2007 formats in newer version, formats, OpenDocument Format, DocBook XML, (X)HTML, HTML Help Compiler files, plain text, java .properties, PO. License: GPL. Suite includes other tools: bi-text aligner/converter into TMX, Validator. Requires: Java JRE
  • Open Language Tools, multiplatform computer aided translation tool. No language limitation (source and target), works with its own format (compressed XLIFF 1.0), round trip conversion provided from HTML, DocBook SGML, JSP, XML (needs configuration file), formats, Open Document Format, plain text, PO, java .properties, Java RessourceBundle, Mozilla .DTD ressource files. License: CDDL. Requires Java JRE
  • Transolution, multiplatform computer aided translation tool. No language limitation (source and target), supports XLIFF files, license: GPL, requires: Python
  • TinyTM, a translation memory module which can be plugged into a client like Microsoft Word and integrated with a database such as SQL.


  • AidTrans Studio Basic – free edition of commercial tool. No limitation in languages (source and target), supports single tm/terminology database in project. Supports: Ms Office 2007 files (Word, Excel, Power Point), HTML, XML, Trados Ttx, OpenOffice Writer files. TMX import/export support by Tm/Tdb managers. Segmentation and non-translatables expressions processing fully configurable using regular expressions.
  • Appletrans, Mac OS X computer aided translation tool. No language limitations (source and target). Supports RTF, HTML, XML. No access to source.


Centralized translation memory

Centralized translation memory systems store TM on a central server. They work together with desktop TM and can increase TM match rates by 30-60% more than the TM leverage attained by desktop TM alone. They export prebuilt "translation kits" or "t-kits" to desktop TM tools. A t-kit contains content to be translated pre-segmented on the central server and a subset of the TM containing all applicable TM matches. Centralized TM is usually part of a globalization management system (GMS), which may also include a centralized terminology database (or glossary), a workflow engine, cost estimation, and other tools.


  • GlobalSight
    • GlobalSight is an Open Source Initiative, sponsored by Welocalize
  • Lingotek
    • Free web application that supports public and private translation memories, an alignment tool, terminology management features, and a workflow tool. Supports both TMX and XLIFF.
  • MyMemory
    • Free collaborative TM with an open standard API. On-the-fly creation on memories from a document.
  • Pootle (official site), Pootle server at
    • Free web application with internal translation memory for the collaborative translation of PO and XLIFF files.


References and interesting links


Saturday, May 29, 2010

Performance tuning Linux Kernel with swappiness parameter

The swappiness parameter controls the tendency of the kernel to move processes out of physical memory and onto the swap disk. Because disks are much slower than RAM, this can lead to slower response times for system and applications if processes are too aggressively moved out of memory.

swappiness can have a value of between 0 and 100

swappiness=0 tells the kernel to avoid swapping processes out of physical memory for as long as possible
swappiness=100 tells the kernel to aggressively swap processes out of physical memory and move them to swap cache

The default setting in Linux is swappiness=60. Reducing the default value of swappiness will probably improve overall performance for a typical desktop installation. A value of swappiness=10 is recommended, but feel free to experiment.

To check the swappiness value use command: cat /proc/sys/vm/swappiness

To make a change permanent, edit the configuration file with your favorite editor:

vi /etc/sysctl.conf
and add following parameter to the end of the file like so:


Save the file and reboot. Source:

Friday, May 28, 2010

Getting your scanner to work with Ubuntu (gt68xx)

You try to use your scanner with XSane but it says that it cannot open the device and gives you the error «invalid argument»? If so, I may have an easy solution for you!

First of all, and after ensuring that you have the package sane-utils installed, open a terminal and run «scanimage -L». Look at the command’s output for the line matching your scanner, which may be something like «gt68xx:libusb:001:005 is a Mustek BearPaw 12: f00 CU flatbed scanner». If your line starts the same way, that is, with «gt68xx», then keep on reading! (If not, then I’m sorry but you’ll have to look somewhere else for instructions on how to get your scanner to work).

Alright, so now that you know for sure that your scanner works with the gt68xx driver, you only need to do one thing: install the firmware for your model. This is a «.usb» file which you can find in the driver CD for your scanner or at this website: firmware for gt68xx scanners, and you only need to copy it into the directory «/usr/share/sane/gt68xx/».

I have tried this with a Packard Bell Diamond 1200 Plus, which needs the firmware file «PS1Dfw.usb». So, I just copied that file from the driver CD (it’s in the directory WinXP; note that, if you prefer, you can also download the file from the above mentioned webpage) to my home folder and then using the terminal moved it by doing «sudo mv PS1Dfw.usb /usr/share/sane/gt68xx/» and set the right permissions for it with «sudo chmod 644 /usr/share/sane/gt68xx/PS1Dfw.usb».

That’s it, now you can go to Applications -> Graphics -> XSane Image Scanner and it will work just fine :).

To get your scanner running, you need a firmware file. The firmware is usually named *.usb (e.g. PS1Dfw.usb). You really need the firmware file for your specific scanner. E.g. the BearPaw 1200 CU's firmware will not work with the ScanExpress 1200 UB Plus. For most Mustek scanners the firmware can be downloaded from the status section. If your firmware isn't listed there, try one of the following methods:

* Recent Windows driver CDs contain the firmware file in the WinXP directory.
* For some scanners the driver that comes on CD or that can be downloaded from the manufacturer's website can be uncompressed using "unzip" and/or "cabextract" and/or "unshield" even if it's an .exe file. Some drivers can also be found on
* If you can't get the firmware directly, you must install the Windows driver on a Windows platform. The firmware was located in c:\\windows\system32\drivers\PS1fw.usb in my case.
* There are some success reports with using WINE to install the Windows driver. The installation crashes but the firmware file can be retrieved from windows/System32/Drivers/ (or windows/) nevertheless. It may depend on the wine version, one success report was with Codeweavers WINE.

Put your firmware file in /usr/local/share/sane/gt68xx/ (or /usr/share/sane/gt68xx/ if you use a SANE package that came with your distribution). You may need to create this directory. Or use whatever directory you want, but you must specify the path in gt68xx.conf later. Example:

su -
mkdir /usr/share/sane/gt68xx/
cp PS1fw.usb /usr/share/sane/gt68xx/
chmod a+r /usr/share/sane/gt68xx/PS1fw.usb

Using the gt68xx backend

Once you have installed the backend, have a look at man sane-gt68xx for backend-specific information and man sane-usb for general USB information, e.g. for how to set permissions.

After successful installation, you may need to setup gt68xx.conf (in /usr/local/etc/sane.d/). That's necessary for some GT-6801-based scanners like the Mustek ScanExpress 1200 UB Plus (and clones), the Mustek BearPaw 2400 CU, and the Artec Ultima 2000 (+ clones). Uncomment the right override for your scanner in gt68xx.conf. If you use a different path for your firmware file or the firmware has a different name, add/uncomment a firmware line in gt68xx.conf. See man sane-gt68xx.conf for details.

Also check that "gt68xx" is listed in dll.conf.

Try sane-find-scanner now. If it doesn't find your scanner, there is a problem with access to the USB kernel drivers, a permission problem or sane-backends wasn't built with libusb support.

scanimage -L should find your scanner now.

Try scanning with "scanimage >out.pnm". If it complains about not finding the firmware, check gt68xx.conf again, especially the override and firmware lines.

"scanimage --help" lists the available options like --mode and --resolution. If something doesn't work, use "export SANE_DEBUG_GT68XX=255" to get debug output. Reports are welcome.

If your scanner works but is recognized with the wrong vendor/model names you can adjust them in gt68xx.conf (vendor/model lines).

If you have compiled your own SANE from source and if you want to use XSane (or any other graphical frontend), I recommend removing the distribution's sane and xsane packages completely and compile XSane from source. An alternative and rather ugly way is to keep the distribution's sane and xsane packages and to overwrite the sane installation by running configure in the gt68xx package with arguments like this: "configure --prefix=/usr --sysconfdir=/etc". All files are in /usr now including the firmware location "/usr/share/sane/gt68xx/". You may need to add "gt68xx" to dll.conf. No guarantees for the second approach, you are on your own.

Make your own Usplash

#sudo apt-get install -y --force-yes libusplash-dev
#cd ~/.gnome2/nautilus-scripts/
#sudo chmod +x MakeUsplash

# USplash Maker Via TheeMahn
# Copyright (c) 2007 Ubuntusoftware Team
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; withConversionout even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# everything after last '/'
`zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --info --text="This will complie a USplash in current folder called $OUTFILE you can then load this file into Startup Manager. Enjoy, TheeMahn" --title="USplash Maker"`;
##Check for zenity
if [ ! -e "/usr/bin/zenity" ]; then
gksudo apt-get install -y --force-yes zenity

update() {
wget -O /tmp/MakeUsplash >/dev/null 2>&1
#Verify it did download it
RESULTS_SIZE=`stat -c %s /tmp/MakeUsplash`
if [ "$RESULTS_SIZE" = 0 ]
zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --info --text='It is suggested to re-run the script, the server may be under a heavy load. If the message persists, please verify you have an internet connection, the server is online & try again. Please refer to UbuntuSoftware Forum for further info.' --title="UbuntuSoftware USplashMaker";
exit 0
#Version check script
REMOTE_VERSION=`grep SCRIPT_VERSION /tmp/MakeUsplash |head -n1 |sed 's/.*=//'`
if [[ -n $DIALOG ]]
dialog --yesno "Newer version of USplash Maker script has been found\n\nDo you wish to install it?" 0 0
if [[ $DIALOG_EXIT_CODE = 0 ]]
cp /tmp/MakeUsplash ~/.gnome2/nautilus-scripts
echo "USplash Maker script has been updated to v $REMOTE_VERSION"
echo "Please re-run the script"
zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --info --text='Newer version of script detected '$REMOTE_VERSION'. It has been upgraded please re-run script.' --title="USplash Maker script";
cp /tmp/MakeUsplash /.gnome2/nautilus-scripts
echo "Newer version detected: $REMOTE_VERSION"
zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --info --text='Newer version of script detected '$REMOTE_VERSION'. It has been upgraded please re-run script.' --title="USplash Maker script";
rm /tmp/MakeUsplash 2>/dev/null

#Resolution Subroutines
convert -colors 256 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS -resize "640X400!" -quality 100 -strip WorkInProgress/usplash_640_400.png | zenity --width=600 --height=100 --progress --pulsate --auto-close --title "Processing @ 640 X 400..."

convert -colors 256 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS -resize "640X480!" -quality 100 -strip WorkInProgress/usplash_640_480.png | zenity --width=600 --height=100 --progress --pulsate --auto-close --title "Processing @ 640 X 480..."

convert -colors 256 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS -resize "800X600!" -quality 100 -strip WorkInProgress/usplash_800_600.png | zenity --width=600 --height=100 --progress --pulsate --auto-close --title "Processing @ 800 X 600..."

convert -colors 256 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS -resize "1024X768!" -quality 100 -strip WorkInProgress/usplash_1024_768.png | zenity --width=600 --height=100 --progress --pulsate --auto-close --title "Processing @ 1024 X 768..."

convert -colors 256 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS -resize "1280X1024!" -quality 100 -strip WorkInProgress/usplash_1280_1024.png | zenity --width=600 --height=100 --progress --pulsate --auto-close --title "Processing @ 1280 X 1024..."

#C Code Subroutines
#Grab Throbbers, fonts & C code
cd WorkInProgress
tar xfv USplash.tar.gz
cd ..

# Dialog box to choose USplash's size(s)
#SIZE="$(zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --width=500 --height=280 --title "Ubuntu Softwares Usplash Maker" --text "Choose the Usplash resolutions to be compiled." --list --checklist --column "Select" --column "Resolution" true '600X400' true '640X480' true '800X600' true '1024X768' true '1280X1024')";
#echo $SIZE
#if [ "${SIZE}" == "" ]; then
#zenity --error --text="Resolution not defined by user. Please choose a size to use. "
#exit 0
#if echo "$SIZE" | grep "600X400" ; then
#n=$(($n + 1))
#echo -n "$n "
# fi
#if echo "$SIZE" | grep "640X480" ; then
#n=$(($n + 1))
#echo -n "$n "
# fi
#if echo "$SIZE" | grep "800X600" ; then
#n=$(($n + 1))
#echo -n "$n "
# fi
#if echo "$SIZE" | grep "1024X768" ; then
#n=$(($n + 1))
#echo -n "$n "
# fi
#if echo "$SIZE" | grep "1280X1024" ; then
#n=$(($n + 1))
#echo -n "$n "
# fi
# How many files to make the progress bar
#TOTAL=$((100 / $n))
#echo $TOTAL
mkdir -p WorkInProgress
cd WorkInProgress
make | zenity --width=600 --height=100 --progress --pulsate --auto-close --title "Compiling USplash"

mv ../$OUTFILE
cd ..
#Clean up
rm -R WorkInProgress
exit 0

Made your own GDM theme

#cd ~/.gnome2/nautilus-scripts/
#sudo chmod +x MakeGDM

# GDM Login Maker Via TheeMahn
# Copyright (c) 2007 Ubuntusoftware Team
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
##Check for zenity
if [ ! -e "/usr/bin/zenity" ]; then
gksudo apt-get install -y --force-yes zenity
# everything after last '/'
input=$(zenity --text "What you like to call the GDM Login screen?" --entry)
case $retval in
exit 0;;
input=$(zenity --text "Author name?" --entry)
case $retval in
exit 0;;
input=$(zenity --text "Description?" --entry)
case $retval in
exit 0;;
`zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --info --text="This will complie a GDM Login in current folder called $GDMNAME.tar.gz you can then load this file into login manager. Enjoy, TheeMahn" --title="GDM Login Maker"`;

update() {
wget -O /tmp/MakeGDM >/dev/null 2>&1

#Verify it did download it
RESULTS_SIZE=`stat -c %s /tmp/MakeGDM`
if [ "$RESULTS_SIZE" = 0 ]
zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --info --text='It is suggested to re-run the script, the server may be under a heavy load. If the message persists, please verify you have an internet connection, the server is online & try again. Please refer to UbuntuSoftware Forum for further info.' --title="UbuntuSoftware USplashMaker";
exit 0
#Version check script
REMOTE_VERSION=`grep SCRIPT_VERSION /tmp/MakeGDM |head -n1 |sed 's/.*=//'`
if [[ -n $DIALOG ]]
dialog --yesno "Newer version of GDM Login Maker script has been found\n\nDo you wish to install it?" 0 0
if [[ $DIALOG_EXIT_CODE = 0 ]]
cp /tmp/MakeGDM ~/.gnome2/nautilus-scripts
echo "GDM Login Maker script has been updated to v $REMOTE_VERSION"
echo "Please re-run the script"
zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --info --text='Newer version of script detected '$REMOTE_VERSION'. It has been upgraded please re-run script.' --title="GDM Login Maker script";
cp /tmp/MakeGDM /.gnome2/nautilus-scripts
echo "Newer version detected: $REMOTE_VERSION"
zenity --window-icon=/usr/share/ultimate/ubuntu_ico.png --info --text='Newer version of script detected '$REMOTE_VERSION'. It has been upgraded please re-run script.' --title="GDM Login Maker script";
rm /tmp/MakeGDM 2>/dev/null

#Resolution Subroutines
convert $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS -resize "1280X1024!" -quality 100 -strip $GDMNAME/background.jpg | zenity --width=600 --height=100 --progress --pulsate --auto-close --title "Processing @ 1280 X 1024..."

#Header Subroutines
#Grab Extras
tar xfv GDM.tar.gz
echo "[GdmGreeterTheme]
Copyright=(c) 2007 UbuntuSoftware
convert $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS -resize "1280X1024!" -quality 100 screenshot.png | zenity --width=600 --height=100 --progress --pulsate --auto-close --title "Generating screenshot..."
cp screenshot.png selection-active.png
rm GDM.tar.gz
cd ..

mkdir -p $GDMNAME
#Create GDM Archive
tar czf $GDMNAME.tar.gz $GDMNAME/
#Clean up
exit 0

Linux Tips and Tricks 2005

Linux Tips and Tricks 2005

Is my hardware Linux-compatible? Find out here

Deciding whether a particular computer is a good candidate for installing GNU/Linux can involve a nightmare of details about hardware compatibility. Nor is assembling a custom computer on which to run GNU/Linux any easier. In both cases, you need to evaluate video cards, sound cards, printers, scanners, digital camera, wireless cards, and mobile devices for compatibility with the operating system. Fortunately, help is available.

True, hardware support for GNU/Linux has improved greatly in the last decade. Today you can pick out any computer system and stand a strong chance of having it work out of the box with your distribution of choice. Yet enough gaps in support remain that doing research before buying remains a sensible idea.

These days, too, you can take support for many types of hardware for granted. Almost all motherboards, hard drives, keyboards, mice, network cards, DVD drives, and flash drives should work with GNU/Linux without any trouble. However, you should be wary of hardware that is operated by software rather than buttons, because the software is likely designed for Windows, or sometimes Mac OS X. Of course, if you think for a moment, you probably want to avoid such hardware anyway -- a software-driven DVD drive, for example, is going to require a couple of extra reboots if you ever want to start your system from it.

Even when you can take so much support for granted, many pieces of hardware remain a gamble. Since few manufacturers mention GNU/Linux support on their packaging, let alone their Web sites, your only recourse is to search the Internet for information. Your results will inevitably include dozens of pages, many outdated or incomplete, all of which makes sorting and assessing the information a time-consuming, often confusing task full of jargon that only experts can fully understand.

What follows is an effort to list the sites with the most current information available about cards and peripherals. The information varies from the vague to the exhaustive, but, in all cases, represents the most succinct and complete resources of which I am aware.

Video cards

If you want to know whether a video card is supported, you have two main guides. For free drivers, check the site's list of supported cards. For proprietary drivers, check the manufacturers' sites. Most people will be concerned with the proprietary drivers for Nvidia and ATI, the two leading video card manufacturers. You can also check the Nouveau project, which is developing free drivers for Nvidia. The Avivo project is also developing free drivers for the R500/R600 lines of ATI cards, but, so far, none have been released.

If you have a choice between free and proprietary drivers, your choice may be based purely on your philosophical preferences. However, just as likely, your choice will involve a tradeoff of functionality. Broadly speaking, free drivers for ATI and Nvidia tend to lack 3-D support, while the proprietary drivers of ATI tend to be slow and buggy and those for Nvidia fast but variable in quality. In other words, none are completely satisfactory.

Another consideration is your distribution's policy about which drivers it ships. Commercial distributions like Linspire and Xandros often ship the proprietary drivers, while Ubuntu uses the free drivers by default but includes a Restricted Drivers Manager from which you can easily install proprietary ones, and Debian offers proprietary drivers in the non-free sections of its repositories. Fedora 7 is one of the first to ship with the free Nouveau drivers for Nvidia cards.

Whichever drivers are available in your distribution's native package format and repositories will be the easiest for you to manage.

Sound cards

No single site contains complete information for the concerned consumer buying sound cards. For a succinct summary of GNU/Linux-compatible sound cards, you can go to the Linux Sound site. You may also be able to winnow out useful information from the mailing lists of Linux Audio Developers.

Another useful source for sound information is the Soundcard Matrix of the Advanced Linux and Sound Architecture project, whose work provides sound support for modern distributions. The matrix is no longer maintained as of May 5, 2007, but its port to a wiki is still incomplete as I write, so, for the time being, you should use the old page. The matrix gives detailed information about each driver for developers, but, so far as consumers are concerned, what matters most is whether a particular card is listed. If a card is listed and the Notes column has no comments about the state of support, then you can be confident that the card will work in modern distributions.


You should be able to get basic functionality in GNU/Linux from any printer that supports the PostScript printing language, thanks to Hewlett-Packard's free drivers. However, if you want detailed information before buying -- especially for multifunction printers -- check the Linux Foundation's Printer Compatibility Database, which is part of the Linux Foundation's OpenPrinting project (formerly

The Printer Compatibility Database is almost an ideal resource for printers. Its database of printers is close to complete, and you can search it by model, manufacturer, or driver. The support offered for each model is summarized on a four-point scale -- Perfectly, Mostly, Partially, and Paperweight. The database holds information on the drivers that work with each printer, where to get detailed instructions on configuration, and information such as the resolutions supported and reader-contributed feedback. Alternatively, you can go to the Suggest Printers page, which recommends what manufacturers and models to buy based on your need and budget in the categories of color inkjets, monochrome lasers, color lasers, and high-end lasers. These recommendations are based in a large part on the reports in the OpenPrinting forums, so you can search them for more detaisl.


If you scan from a multifunction printer, you can find information about it from the Printer Compatibility Database. However, the main source of compatibility information about all types of scanners is the SANE project's Supported Scanners Search Engine, which will tell you whether a particular scanner is usable under GNU/Linux. Generally, the status is either complete or unsupported -- but little additional information is available in many of the results that are more than two or three years old. Unfortunately, too, the search fields require you to know a specific manufacturer, model, or product ID, rather than providing drop-down lists to choose from. To get more detailed information, try the SANE project's forums.

Digital cameras

Modern digital cameras have mostly abandoned the proprietary formats of the past in favor of open USB protocols that are easy for GNU/Linux to support.

However, if you want to make sure that you aren't considering an exception, gPhoto, which provides the main free libraries for camera support, maintains a list of 914 cameras as well as the state of their support. Another source is Hubert Figuière's Digital Camera Support for Unix, Linux and BSD, which gives more detail about not only the cameras supported, but also how to configure them, what is not supported, and the issues involved in support. Both of these sites give their information in lists rather than searchable databases.

Wireless cards

A few years ago, modems were the major gap in hardware support. These days, it's wireless network adapters. Moreover, frequent releases of new models makes support difficult. In some cases, two cards that are supposed to be the same model may have different firmware and require different drivers.

The best single site for keeping up-to-date on the state of wireless support and the issues and history surrounding it is the Wireless LAN Resources for Linux site, which is maintained by Jean Tourrilhes and sponsored by Hewlett-Packard. The information on the site is chaotically presented, but with patience you can extract useful nuggets from it.

If your wireless card is not supported, you may be able to get it to work by using either ndiswrapper or, for Broadcom cards, bcm43xx-fwcutter. Each of these projects uses resources from Windows or Mac drivers to enable the cards they support under GNU/Linux.

The main disadvantage of both programs is that, in each case, you need to be able to use the lspci command to obtain your card's bus ID before you can say for sure whether your card is supported. Before you buy, the best you can do is check the list to see how many cards that are similar to yours will work with ndiswrapper.

Laptops and other mobile devices

Tuxmobil maintains lists of laptops, music players, cell phones, PCMCIA cards, and other mobile devices in a collection of PDF documents. The information on the site varies widely in detail and quality, and much of it is distribution-specific. However, with a little searching and some creative adaptation, you still have a good chance of finding useful information here.

Other information sources

If the sites listed here fail to give you the information you need, try the mail forums and IRC channels for the distributions you are considering installing. Often, volunteers maintain specific, step-by-step information about how to work with troublesome hardware, and are happy to guide you through your efforts to learn or configure.

In fact, you might consider searching the forums for a large distribution like Debian and Fedora even if you don't plan on using it. The sheer volume of information makes the forums of large distributions a useful resource. The disadvantages are that you have more information to search through, and may have to adjust file locations to the distribution that you are actually using.

Keep an eye, too, on sites like Linux and Linux Devices, which regularly publish reviews of how hardware performs on GNU/Linux. The information on such sites is usually not exhaustive, but you may be lucky and find the information that you currently need.

In the future, another useful resource may be Hardware4Linux, a site which is attempting to create a list of usable hardware rated by users. However,

currently, the site has less than 1200 replies or 5300 ratings, so for now the most useful part of the site may be the comments users have submitted.

If you are buying a ready-made system, the simplest way of getting information is to take along a live CD of the distribution you plan to use when you shop.

Show that you are genuinely interested in buying and engage the store clerks in conversation, and in many cases they will allow you to boot the live CD, even if they have never heard of a live CD. Both the performance and the information you get from the live CD should tell you most of what you want to know.

With all these sources, you should be able to remove much of the guesswork from buying hardware on which to run GNU/Linux. Undoubtedly this list is not complete, so if you know of any other resources, please add them in a comment.

Read in the original layout at:

Linmodem howto

1. Introduction
This is the Linux Linmodem HOWTO document. It is intended as a quick reference to help you find out if there is a way to get your (so-called) winmodem working under Linux, and, if so, how to do it. You should understand from the outset that there may well be no support for your winmodem: there is limited support for such modems, often in the form of vendor-created but vendor-unsupported, binary-only kernel modules (though a small number of open-source projects exist).
To emphasize: your best bet under Linux is certainly to get a true hardware modem. However, if you're stuck with a winmodem, perhaps this document can help.
For the most up-to-date information about available Linmodem drivers, visit Rob Clark's site, our small resources page, and the mailing list archives. General modem issues, such as IRQ settings and dialup scripts, are dealt with much more thoroughly in the more general Modem-HOWTO, Serial-HOWTO, PPP-HOWTO, and other related HOWTOs available at the Linux Documentation Project site and elsewhere.
2. Linmodems
2.1 What is a Linmodem?
A Linmodem is the Linux implementation of a "winmodem" (see disclaimer). These devices are 'less than' a modem in the sense that they depend on software to perform, to a greater or lesser extent, the functions traditionally handled by modem hardware. The rationale for this is, of course, that software is cheaper than hardware, and can be upgraded/expanded/improved without the use of screwdrivers (usually); however, for the modem to function at all, one requires software that can run on one's preferred operating system.
2.2 Which Linmodem hardware is supported?
An ever-growing number of winmodems will work under Linux. Each chipset for which a driver is known to exist has a section in this document, below, describing its installation. Any other chipset has no known support under Linux (at least, not known to us).
2.3 How can I find out if my GeeWhiz 9.8.7 Modem / Laptop has one of these chipsets?
Information from the system
The information about installed hardware using commands such as:
PCI: cat /proc/pci and lspci
ISA: pnpdump and isapnp
Internal PCMCIA: cardctl ident
General: dmesg | more and cat /proc/interrupts
MarvS notes that the Device Manager under Windows can provide similar information, but it should be noted that a manufacturer will often simply put its brand name on a built-in modem, so this information may not be as useful as you might hope (e.g., what chipset does a "Compaq Internal 56k" modem have?). Additional information may sometimes be obtained by making a modem log, implemented under MS Windows as a check box option within the Dial Up Networking menus. The file produced is C:\WINDOWS\MODEM.LOG. It will contain the modem initialization strings, and perhaps also the name of the modem configuration file, which may also contain other useful information.
Modem names and identification numbers
If you know the precise name of your modem, you can try searching the large Linux Modem Compatibility Database at Rob Clark's site. The color/letter code on the left side of the table will indicate if your modem is known to function or not under Linux. The code "LM" indicates a Linmodem, and the modem notes should indicate which driver you need. A "WM" means it's a winmodem, but no Linux support is known to exist. Be careful not to assume that modems with similar names will contain the same chipsets, or will necessarily behave similarly whatsoever! Your WhizBang LX56 and your friend's WhizBang GT56 could have entirely different innards.
If you do not know the precise name of your modem, you can search based on the identification number of the modem ( on every modem there must be printed a registration number, which may either be the board producer's designation, or, alternatively, an FCC registration number. An example photo of such an ID number on a modem board can be found at on Rob Clark's site.) Use your web browser's "Find in Page" to search his table of modems and FCC ID's to obtain chipset/driver information. Alternatively, you can directly search the US Federal Communications Commission (FCC) database at Read the directions carefully, and be careful not to confuse O (the letter) with 0 (the number), and other possible mixups.
Laptops with internal modems
You may not be able to obtain the FCC ID number if you have a laptop which you prefer not to open up, or are looking to buy a particular machine and the vendor has not been polite enough to provide you with the information nor a sample box for you to take apart and play with. In these cases, you might try:
Kenneth Harker's Linux on Laptops site indexes a large number of user-created sites describing their experiences with Linux on particular laptop models.
Werner Heuser's Mobilix: Linux Modems and Mobilix: Linux Mini-PCI pages include lists of specifications for laptops with internal modems and NIC's, as well as useful tips for obtaining more information in case the model is not listed there.
The computer vendor's manual, web site, or (horrors!) technical support.
3. General Setup and Kernel Module Issues
3.1 Kernel Module Support
All of the kernel drivers listed here are released as kernel modules; therefore, you must be sure to have a kernel which supports modules. In addition, "module version" support should be enabled to aid the use of kernels and modules which are not version matched, as described further below. If you use a kernel from a reasonably recent Linux distribution, such module support is most likely already enabled. If you're compiling the kernel yourself, then you should already be aware of how to enable modules, via the Kernel HOWTO. In any case, you can check to make sure that the following settings exist in your kernel configuration file (which is usually found under /usr/src/linux):
3.2 ISA Plug-n-Play
If you have an ISA Plug-n-Play modem, you will most likely need to use isapnptools to allocate resources to the modem card. For this, you need to have isapnptools installed and have an entry in the /etc/isapnp.conf file for the modem. You should read the manual pages and the Plug-and-Play-HOWTO, but if you have no other ISA devices you're concerned about, basically all you need to do is:
1.If possible, configure your BIOS to "Non-PNP OS."
2.As root, run pnpdump to generate a prototype isapnp.conf file based on probed cards and your system's current resource usage.
3.Look for your modem in this output, and uncomment the lines corresponding to the (otherwise unused) IRQ you wish to use for the modem. For example, Sean's isapnp.conf for a Thinkpad i1411 with a Lucent LT modem includes:
(INT 0 (IRQ 11 (MODE +E)))
(IO 1 (SIZE 8) (BASE 0x0100) (CHECK))
(NAME "ACRd119/1[0]{LT Win Modem }")
# (ACT Y)
Strangely, in this case at least, it was necessary to leave the #(ACT Y) commented out. If it doesn't work for you one way, try it the other.
4.Copy the file to /etc/isapnp.conf
5.Reboot. You should see a message along the lines of 'Initializing ISA PNP devices...OK' on booting. If it fails, you have probably selected an IRQ/DMA setting which is already in use; try another of the options given in the pnpdump output. (Note that it is probably not necessary to reboot, if you run isapnp with the right flags. However, it's easiest for the beginner to simply reboot at this point.)
3.3 PCI Modems
If you wish to know more about your PCI modem than cat /proc/pci gives, utilities within the software package pciutils are useful, such as scanpci and lspci. In particular, lspci -vv gives lots of nice, useful information.
3.4 Module tools
The following commands are useful when dealing with modules. Many require root priveleges. See the manual pages (e.g., man insmod) for more detailed information on these commands.
insmod, insmod -f, and modprobe
A version-matched kernel module should usually be inserted using the command modprobe module_name; modprobe will try to insert any other modules on which your module depends (as determined by depmod, described below).
A single module can be inserted (without those modules on which it depends) using the command insmod module_name. If the module were compiled under a different kernel than the current one, insmod would report the version mismatch and refuse load the module. One can, however, pass a flag to force the module to load despite the mismatch: insmod -f module_name. If the kernel interface the module uses did not actually change with the kernel version, the module will be inserted and could be to some degree functional.
This is the case with, for example, the ESS modem module esscom.o which, while compiled under 2.2.12, can be forcibly inserted with later kernels and will function to a greater or lesser extent up through kernel version 2.2.14 without further changes; beyond 2.2.15, the patch to tty.h described below is required. However, even forcing insertion fails for kernels from the 2.4 series.
A module can be unloaded (removed from the kernel) after use by issuing the command rmmod.
The depmod commands analyzes module dependencies. The compatility of precompiled modules with a running kernel can be checked with a command like:
depmod -e ltmodem.o
For the specific example of the ltmodem.o module compiled under kernel 2.2.12 with a running kernel 2.2.17, the returned information includes:
depmod: *** Unresolved symbols in ltmodem.o
depmod: bh_mask
depmod: schedule_timeout
depmod: request_region
depmod: pcibios_read_co
and many others.
Using a module with unresolved symbols can be a dangerous thing, as described below.
4. Tips and Tricks for Precompiled Modules with different Kernel Versions
Many of the linmodem drivers are only available as precompiled, binary kernel modules. Generally, modules/binaries transparently function only with the kernel against which they were co-compiled. Therefore, getting a precompiled linmodem driver to work with your particular kernel could be a challenge.
Since the Linux kernel is a dynamically changing beast, it is very unfortunate that many modem/chip vendors have not yet chosen to release source-code versions of their drivers, which would ensure your and our ability to modify these drivers appropriately as kernel source code evolves. Some of the binary modules have been coaxed to function under some later kernel versions using various tricks, as described below; however, even though a module may be rendered functional, it is advisable to use them minimally. Quoting an email from Mark Spieth,
"A driver can never work properly if there are unresolved symbols, as it means something is not going to work. Furthermore, it means that that something that would have been called will call something else in the kernel and this could be anything. This is very bad."
Therefore, you should be careful in using binary modules with a kernel of a different version; proceed at your own risk. If you require above all that your modem function, consider downgrading your kernel to match the module - this is by no means a ridiculous prospect. Despite these warnings, however, many others have used mismatched binary modules and kernels with only minor annoyances ( such as the occasional kernel panic ) using tricks and tools such as the following.
4.1 Fixscripting
Mark Spieth has contributed a progressively improved series of "fixscripts" for editing a binary module so that version mismatch warnings are eliminated. Insertion of the "fixed" module then proceeds without the forcing flag, i.e. simply insmod module_name. Later versions also rename module symbols to match those exported by the kernel, so that "Unresolved symbols" errors are not returned by the test depmod -e. It must be emphasized that this change is almost entirely cosmetic - it is still recommended that the module be used minimally.
To use the fixscript on, for example, the (now-deprecated) binary Lucent module ltmodem.o, make a working directory such as /root/modem. Obtain the latest fixscript from Save the file as fixscript. View it with less or your favorite text editor to check that DOS hard stops were not accidentally acquired. They look like bold M, underlined M, or ^M depending upon your viewer/editor. NOTE: the viewer more does NOT display these DOS newlines.
Make the file executable with chmod +x fixscript. Generate a "fixed" module with, i.e.,
./fixscript ltmodem.o ltmodem2217.o
No errors should be generated by testing the module dependencies with
depmod -e ltmodem2217.o
and insertion should succeed with a simple, non-forced,
insmod ltmodem2217.o
The "source code" supplied with some PCTel modules (a small C file) performs similar masquerading when compiled and linked with the binary libraries in those packages; unlike the partially-open-source Lucent driver, it does not compensate for any actual changes to the kernel interface.
4.2 Patching tty.h
In his quest to get the original, binary-only Lucent LT modem driver (version 5.68) working with kernels later than 2.2.14, Mark Spieth noticed that one simple change in the Linux kernel source fixed the major incompatibilities incurred between the 2.2.14 to 2.2.16 kernel versions. This patch is no longer necessary when using the partial source/binary Lucent driver (version 5.78), but it remains useful for those with other modems whose drivers are compiled against pre-2.2.15 kernels.
The patched 2.2.17 tty.h and some 2.2.17 kernel packages compiled with this patch are available from If you want to do the edit yourself, the line to shift is in the structure tty_struct within include/linux/tty.h; it has an extra member poll_wait in later kernels. Move this member to the bottom of the structure, so that the remaining offsets will then be the same as those in versions earlier than 2.2.15, and thus be compatible with the precompiled kernel module. You will need to recompile your kernel and modules after making this change to the source.
4.3 Using a ppp.o from Kernel 2.2.14
A trick exists for using the binary modules with kernels later than 2.2.15 which does not require kernel recompilation; however, following the discovery of the tty.h patch described above, this trick is no longer necessary nor recommended. The trick is to replace the /lib/modules/net/ppp.o module with one from kernel 2.2.14. Christoph Hebeisen (cth(at) reported that the use of ppp.o version 2.2.14 rather than that of version 2.2.16 with the Lucent module provided functionality under 2.2.16 kernels. Willie Green (willjr(at) confirmed that this trick works also with the ESS module. After simple insertion of a supporting version-matched module:
insmod slhc
the mismatched ppp.o from 2.2.14 source is inserted
insmod -f ppp.o
We wish to emphasize that this trick with forced insertion is less stable than the easy and more effective change to the kernel source file tty.h, as described above.
5. Specific Chipsets and Their Drivers
5.1 IBM Mwave (Thinkpad 600E)
IBM has a completely open-source (GPL'ed) driver for the software modem in their Thinkpad 600E's available here.
5.2 Lucent LT
This modem enjoys the most support under Linux, in that there exist three different driver packages:
There exists a manufacturer-unsupported, half-binary/half-open-sourced kernel module, originally designed for Red Hat 6.2's 2.2.14-5 kernel, but substantially reworked by Mark Spieth and others to function with 2.2.x and 2.4.x kernels. This is driver version 5.78(c,d,e,...), and is the driver you are most likely to have success using.
There exists a manufacturer-unsupported, binary-only kernel module, compiled under Red Hat 6.0's 2.2.12-20 kernel. This is driver version 5.68.
Some open source tools for use with Lucent modems are available at Pavel Machek writes that "It is not too useful, however: it is a hardware driver, and without a v.34 protocol stack, you can't connect to your ISP. It is enough to turn your Lucent winmodem into an answering machine, however."
It should be noted that the binary-only driver module (from "") contains code from the GPL'ed Linux serial.c driver, so, since the source code for the modem driver is not available, trafficking in this driver is apparently in violation of the GPL. Distributing the partially open source driver ("") may or may not be technically legal, since the GPL'ed code, though not yet linked with the closed-source code, is certainly intended to be so. See this Kernel Traffic issue and a Linux-Kernel mailing list archive for the week including Dec. 3rd, 2000, for more details.
Driver v5.78(c,d,e,...) - Installation
You should obtain the most recent package for your kernel from and follow the up-to-date instructions given there.
Manufacturer's driver version 5.68 - Installation
This driver is superseded by version 5.78, described above; however, it may still be of some use in special cases.
1.Obtain the package for your kernel: to 2.2.15 and above : same URL, but "tty.h" patch is required; see "Tips and Tricks...", above.
2.unzip (enter root password when prompted)
4../ltinst (a 'file not found' error will be issued due to a flaw in the installation script; ignore this error.)
Your modem should now be accessible as the device /dev/modem or /dev/ttyS14.
Open Source Tools - Installation
See the documentation with the source for instructions.
5.3 ESS
Binary-only drivers for ES56T-PI (PCI) and ES56V-I (ISA), compiled under RedHat 6.0's kernel 2.2.12-20, are available. The driver has been used via forced insertion up through kernel 2.2.15, and up through 2.2.17 using the "tty.h" patch described in the "Tips and Tricks..." section, above.
1.Obtain the package for your modem (Note that these appear to have been removed; I'll try to mirror them at
ISA: or
2.For kernel 2.2.15 and later, apply tty.h patch (See "Tips And Tricks...," above); recompile kernel and modules.
3.Unpack the package with: unzip package_name
4.Change to the root user: su (enter root password when prompted)
5.Create the device file: mknod /dev/esscom c 127 1
6.Make convenience device: ln -s /dev/esscom /dev/modem
7.Make convenience device: ln -s /dev/esscom /dev/ttyS15
8.Set device ownership: chgrp uucp /dev/esscom
9.Set device permissions: chmod 666 /dev/esscom
10.Masquerade module version (See "Tips And Tricks...," above): ./fixscript essmodem.o essmodem.fix.o
11.Install module file: cp essmodem.fix.o /lib/modules/`uname -r`/misc/essmodem.o
12.Insert module in kernel: insmod -f essmodem
13.(Optional) Provide for automatic module loading: add a line "alias char-major-127 essmodem" to the file /etc/modules.conf or /etc/conf.modules
5.4 PCTel
Binary drivers can be found at
A Debian-style installation package for kernel 2.2.16 was made available by Corel at A gzipped/tarred package derived from the .deb is available here. In addition, a driver for kernel 2.4 was contributed by Thomas Wright, and is also available here. Other packages, requiring the superficial compilation described below, are also known to exist.
There are apparently two types of PCTel module package around.
1.A package (rpm or deb) which installs two module files, pctel_hsp.o and pctel_pci.o, in /lib/modules/2.2.16.
With such a package, if you are running a kernel more recent than 2.2.16, you will need to use forced insertion (insmod -f), and if you are not successful, might try the "fixscript" method used with the Lucent 5.68 and ESS modules above - but, note that this has not, to my knowledge, been tried out yet. If you are running a kernel older than 2.2.16, you should consider upgrading your kernel, or else try the fixscripting as well (this is also not guaranteed to work). Please send me a report if you get these to work.
2.A package which, when unpacked, gives a set of libraries (hsp.a, etc...) and a small C source file (ptmodule.c), which should be in directories like lib/ and src/module/. If there are no directories, create them and arrange the files with:
mkdir lib
mkdir src
mkdir src/module
mv *.a lib/
mv Makefile *.c src/module
Now go to the directory src/module and type make. This should generate the module file pctel.o, which will appear back up in the directory lib. (The driver module is not the object file ptmodule.o in src/module!)
The apparent version of the module generated in this way will match your current kernel version.
With the modules in hand, proceed to install as follows:
1.Change to the root user: su (enter root password when prompted)
2.Create the device file: mknod /dev/pctel c 62 79
3.Make convenience device: ln -s /dev/pctel /dev/modem
4.Make convenience device: ln -s /dev/pctel /dev/ttyS15
5.Set device ownership: chgrp uucp /dev/pctel
6.Set device permissions: chmod 666 /dev/pctel
7.Install module file (only for package type 2, above): cp pctel.o /lib/modules/`uname -r`/misc/
8.Insert module(s) in kernel with insmod -f modulename
5.5 Conexant/Rockwell HSF
There exist drivers for kernels 2.2.14, 2.2.16, and 2.2.17 at The page is in French, but the installation commands are given on the page in boldface red text (you can also use the babel fish). Essentially, the instructions are to download the appropriate package, unpack it with tar -zxvf, and run the installation script ins_all.
This driver is, however, a bit finicky (with the most common symptom of failure being the "NO DIALTONE" response), but a number of people have been able to get it to work, usually by inserting their modem's vendor ID in the modem's .inf file, perhaps along with a change of the device major number from 254 to 253. Some helpful pages include Imran Ghory's guide, and the mailing list archives, such as this message, and this message about how to get the modules to automatically load.
5.6 Intel (formerly Ambient Technology, formerly Cirrus Logic)
A driver for the HaM modem is available at
Mikhail Moreyra has written a GPL'ed driver for the CL-MD5620DT chipset which can do up to 33.6 kbps; however, this is alpha software and should be treated with due care. The driver can be obtained at Gabriel Gambetta (ggambett(at) issued a patched version of the driver to allow standard AT modem commands; you can get this version at Rob Clark's site here.
5.7 3Com
A request for comments was posted by a 3Com official about the possible demand for a binary-only driver for their miniPCI combination NIC/winmodem here on the mailing list; please respond to the address given,, and not to the mailing list. Though to my knowledge no driver has yet been released, Werner Heuser's miniPCI page has more information and links.
5.8 AMR
Ian Stewart reports that he is working on a "mid-level driver" for the AC97 codec.
6. Troubleshooting
So you've read through this document, the Modem-HOWTO, and the PPP Howto, are pretty sure that your modem matches one of the drivers available, but it still doesn't work? There are a number of points in the process at which something could break down.
Linux generally maintains records of networking connections which are very useful in troubleshooting problems. Their particular filenames vary with both the Linux distribution and Dial-in software, but the system log files /var/log/messages, /var/log/syslog, etcetera, should provide at least some information.
For both your own trouble shooting and queries for help to a list, it will be useful if you accumulate the information requested below. As root, change to the directory in which the modem install scripts are located, and start a script record as shown below. After this script is terminated with "exit," copy it out of your Linux partition for transmission to the list which may aid you.
(Below, # are explanatory comments.)
# start the recording,
script ModemTest.txt
# type in as much info on your Modem card as you have
echo winmodem name, manufacturer, designation, and chip if possible
# this gives your current kernel version
uname -r
# this gives information on your serial ports
setserial -agv /dev/ttyS*
# this information on your interrupts (irq)
cat /proc/interrupts
# show the contents of your module installation script (insert script name):
cat ScriptName
# Check if your script is executable:
ls -l ScriptName
# a response is OK if it has "x" such as below:
# -rwxrw-rw- 1 root root 654 Jan 6 2000 ltinst
# otherwise make it executable with:
chmod o+x ScriptName
# verify with
ls -l ScriptName
# if ScriptName has not been successfully run before under this kernel
# run it with:
# what is the symbolic link /dev/modem set to:
ls -l /dev/modem
# What is the DeviceName specified in the ScriptName (/dev/ttyS14 or ...?)
echo DeviceName
# what is your modem driver name? Something like DriverName.o
# with the ".o" indicating it is a compiled binary
echo This is my DriverName.o
# if should have been inserted in the Modules Path
# Try to display it there with:
find /lib/modules | grep DriverName
# Is DriverName among the modules installed in the running kernel?
# if not try a simple insertion:
insmod ./DriverName.o
# or if it was in the Modules Path, the following will suffice:
insmod DriverName
# check for insertion:
# if not inserted, try forcing:
insmod -f ./DriverName
# list your inserted modules again.
# If DriverName is NOT listed,
# their is an incompatibility between modem hardware, driver and kernel.
# Further effort will be of No use.
# If DriverName is listed, let's do a bit more information.
# You may first wish to rerun the configuration utility
# used to setup dial-in connections for your Linux installation.
# Remember to edit your PassWord from this record later.
# You will probably be queried for the following information
# which you should have ready:
#Port to be used (/dev/modem or /dev/ttySn),Dial-inNumber, UserName, PassWord.
# Run your configuration utility.
# To stop recording
If dialin was not successfull, append to this a record from your log file. As an example, a section of a /var/log/syslog from a Debian Linux system is below.
7. FAQ
7.1 I have a winmodem. Will it work under Linux?
Probably not. Please see the section "Which Linmodem hardware is supported?" above, and check the Linux Modem Compatibility database at Rob Clark's site.
7.2 I get "NO DIALTONE".
Try setting your BIOS option from "PNP OS" to "non-PNP OS", from "Windows" to "Other OS", or the equivalent.
Conexant users: See the Conexant section, above.
7.3 I get a "device or resource busy" error.
If you have an ISA modem, did you use the isapnptools to allocate IRQ and DMA resources to the card? See "ISA Plug-n-Play", above, for more information.
Double-check that you created the device file correctly, and try to eliminate any IRQ conflicts you might have. If all looks well, but it still doesn't work, check the mailing list to see if someone else has (and has perhaps fixed) the same problem, or try to fix it yourself and inform others of your results.
7.4 I get unresolved symbols when fixscripting/insmoding.
Unresolved symbols are a true danger of version mismatching and are, in general, bad, but are also almost inevitable with binary modules. If the fixscript reports unresolved symbols, or the module does not work despite the unresolved symbols, you may be out of luck with that kernel/module combination; however, a few common cases involve symbols like:
slhc_xxxx: You probably need to insmod the slhc module before inserting the modem/ppp modules; using modprobe rather than insmod should also obviate this problem.
printk, jiffies: Your kernel may be compiled with SMP enabled. None of the binary modules are known to be SMP-safe, and will probably only work on a single-processor machine with a single-processor kernel, i.e. SMP disabled. You should try recompiling your kernel or otherwise obtaining a version with SMP disabled. (Thanks to Tom Reinertson (treinertson(at)
tty_xxxx with esscom.o: Earlier fixscripts were not able to handle the version-specific symbols in this module. More recent versions are available at which should be able to fix this module as well.
If a module works in an unstable fashion, it could be that, under some circumstances, you are avoiding those symbols, while in others, you slam up against them. Try out different ppp dialup programs (wvdial, kppp), which call a different set of functions under similar conditions. It is also possible that the fixscript, which was designed for the lucent module, is not "fixing" the symbols used in your module. If you find no combination that works, consider "downgrading" to a kernel which has a closer version match to that of the module.
7.5 My PCTel modem doesn't work.
Do you need to give the module a country code parameter? See the appendix.
Are you using the right driver module? There are a few PCTel drivers around (see the section "Which Linmodem hardware is supported?" above). You might try one of the others and see if that helps.
7.6 The modem dials and connects fine, but then it drops the connection.
This is an often-reported problem that may have a few, or no, solutions:
1.It is possible that the module is installed correctly and is working, but that you have a problem with your ppp configuration. In particular, if you find an error in the log along the lines of "peer is not authorized," try changing "auth" to "noauth" in /etc/ppp/options, and/or commenting out "auth" and "lock" (by placing a '#' at the beginning of the line). Corel has a FAQ entry at about this.
2.It has been reported that, with some kernel/module mismatches, a program like kppp will give this error, while an alternative like wvdial does not, for the same modules and hardware. You may wish to try a different ppp dialer and see if that helps.
3.Lastly, there is the potential relationship with sound support. Comparing functionality of ltmodem.o with/without sound support in the kernels, dial-in is OK, but ppp is NOT achieved for the kernel without sound support.
Most Linux distributions do deposit a kernel configuration file along with the kernel. For Debian related distributions, it is the file
The positive choices can be quickly displayed with:
grep SOUND /boot/config-version |grep -v not
For the specific example of a 2.2.17 version:
# grep SOUND /boot/config-2.2.17 |grep -v not
Either CONFIG_SOUND=m or CONFIG_SOUND=yes would show that the kernel has sound support (as would simple sound output).
If none of these helps, you may wish to consider trying to use a kernel version which is closer to the module. Otherwise, try the mailing list at for help.
7.7 I get a kernel panic on closing the connection or unloading the driver.
There are a couple of possible solutions to this, neither of which may work:
Try a different ppp dialer (wvdial, kppp).
Configure the module so that it stays in the kernel, i.e. so that it is not unloaded.
7.8 Nothing seems to work. To whom can I turn for help?
Double-check that the modem you have is actually supported by the module you have. See "Which Linmodem Hardware Is Supported?" above.
Try to determine at which stage of the installation process things break down. Check the man pages on the commands used in that stage and see if you can determine the source of the problem.
If all seems lost, please see the section "Troubleshooting", below , and consider sending a message with the complete information described there to the mailing list at
7.9 Who wrote the driver for my winmodem, and how do I contact him/her?
If a contact address is not given above, you can in general assume that it was probably somebody on contract to the manufacturer, who probably does not have the authority the update/release/change the source code, and who probably doesn't have time to reply to your email in any case. See, for example,
8. Appendix
8.1 PCTel Module Parameters: Country Code
The following is quoted from one of the PCTel readme files. Thus you can choose the appropriate country code by inserting the module with a parameter as:
insmod pctel.o country_code=7
(the "7" being replaced by your country code from the list below). Thanks to Jonathan Emery for pointing out the correct syntax.
Set and report country code.

This driver takes a module parameter to setup the correct country code
setting for various country's telephone networks and it also can report
back the country code been set.

Here are the two versions for country_code selection and reporting:


To set country code:
"country_sel_rep sel 7" will sets the country code to 7.

To query the driver for the currently set country code:
"country_sel_rep rep" returns the current country code as the exit code.


To set country code:
"country_sel 7" to set the country code to 7.

To query the driver for the currently set country code:
"country_rep" return the current country code as the exit code.

country_code country_name

6 UK

LILO and GRUB: Boot Loaders Made Simple

LILO (Linux Loader) and GRUB (GRand Unified Bootloader) are both configured as a primary boot loader (installed on the MBR) or secondary boot loader (installed onto a bootable partition). Both work with supporting operating systems such as Linux, FreeBSD, Net BSD, and OpenBSD. They can work with unsupported operating system, such as Microsoft Windows XP, in the configuration file. Both allow users—root users—to boot into single-user-mode.


LILO comes as standard on all distributions of Linux. To work with LILO an administrator edits the file /etc/lilo.conf to set a default partition to boot, the time-out value, which choices should appear in a menu, kernel parameters, which partition to mount as the root partition, whether or not to initially load a RAM disk, where LILO should be installed, and other information. The administrator must then update the loader by running the LILO command.

MBR Vs. Root Partition

The configuration file, by default is read by LILO. The configuration file tells LILO where it should place its boot loader. In general, you can either specify the master boot record (MBR) on the first physical disk (/dev/hda) or the root partition of your Linux installation (/dev/hda1 or /dev/hda2). The first stage of loading LILO is completed when LILO brings up in order of the each of the letters—L-I-L-O. When you see the LILO prompt, you are in the second stage.

If you have WINXP installed to MBR on your hard drive, install LILO to the root partition instead of the MBR. If you want to boot up Linux, you must mark the LILO partition as bootable. If you don't overwrite the master boot sector, you'll find it easier to uninstall Linux and LILO.

If you are starting with LILO, you can begin editing the configuration file. For existing Linux users migrating to LILO, you should get the latest version of LILO. Before you try LILO, you should have an emergency Linux boot disk in case you have problems booting the system from the hard disk, a CD-ROM, or another storage device. After you install LILO on your system, you can make it take over your MBR. As a root user, type:

# /sbin/lilo –v -v

LILO Configuration File

Given below is a sample /etc/lilo.conf file. You should follow the naming conventions like Linux (for kernel 2.6.23-13). You can have many kernel images on the same /boot system. Get the latest Linux kernel versions before you try out the configuration file.

For other parameters, refer to the manual pages (man lilo.conf).

















other = /dev/hda

label = WindowsXP

The boot = option tells LILO to install the boot loader to the MBR of the first hard disk. The map = and install = options point to the files that LILO uses internally during bootup. Do not change these files.

When booting, the boot loader will wait five seconds for you press Shift. If you don't, then Linux, the first kernel, will be booted. If you do, the boot loader will ask you which image to boot. If you forgot the possible choices, press TAB and you will be presented with a menu. You now have the choice of booting Linux, ker2418, or WindowsXP. After you make your selection, you will find the compact option speeds up the booting process. Loading Linux prompts you to enter a password for the image. You can add the fallback= option to any image. This option specifies that is stored as the default command line if the current image is booted. If using the fallback option, the next reboot will load a different kernel.

Since lilo.conf is not read at boot time, the MBR needs to be "refreshed" when it is changed. Like getting LILO into the MBR, you need to run:

$ /sbin/lilo –v -v


When you install Microsoft Windows on a computer that has the Linux operating system installed, Windows may overwrite or deactivate the Linux boot manager. As a result, you can no longer access the Linux operating system.

Here's how to fix the problem. If LILO was installed to the MBR, restart the computer using a bootable Linux floppy disk and then run LILOCONF program from the floppy drive. If LILO was installed to the superblock, use the FDISK command to activate the Linux partition.

Another possible solution is to delete the Linux partitions on a Windows-based computer, restart the computer, and then use Partition Magic to create Linux partitions. This utility comes with BootMagic, which allows you to switch operating systems.

To allow Linux system fixes, you can enter rescue at the boot prompt to boot Linux into single-user mode. Similar to rescue, you can also enter single to try to boot from your hard drive. You can also use root=to allow you to boot from a CD-ROM.


GRUB combines installations with one install command and allows for MD5 encryption of passwords. When a configuration file is configured incorrectly, the system reverts to the command-line prompts.

MBR Vs. Root Partition

If you have WINXP installed to MBR on your hard drive, install GRUB to the root partition instead of the MBR. Better yet is the grubinstall.exe, a GRUB installer for Windows. This program configures the GRUB so that it can be installed inside an NTFS or FAT partition on Windows NT/2K/XP, and can be loaded from the default bootloader NTLDR. This means that you can safely install this bootloader and remove it, without ever touching the MBR and risking any problem with your disk.

For existing Linux users wanting to migrate to GRUB, get the latest version of GRUB. Before you try GRUB, you should have an emergency Linux boot disk in case you have problems of booting the system from a hard disk or another storage device. After you install GRUB, you can make it take over your MBR. Do this at the prompt as a root user:

# /boot/grub/grub

Now, you can use the GRUB command

grub> install (hd1,2)/boot/grub/stage1 (hd1) (hd1,2)/boot/grub/stage2 p


While this is a bit hard to read at first glance, it is more efficient than the LILO counterparts. Installation of stage one and two images and the configuration are combined with one install command. Let's take a look at the installation of the first stage in the install command:

install (hd1,2)/boot/grub/stage1 (hd1)

What this says is that GRUB is installing the first stage image on the third partition of the second disk (Linux), counterpart to LILO's hdb3. It is also installing to MBR on this same disk.

In the second part of the command, the stage two image is installed:


Finally, the installation is complete with the optional location of the configuration file:

p (hd1,2)/boot/grub/menu.conf

GRUB Configuration File

Given below is a sample /boot/grub/grub.conf file.




password --md5 [encrypted password]

title Linux

password --md5 [encrypted password]

root (hd1,2)

kernel /vmlinuz-2.6.23-13 ro root=LABEL=/

initrd /initrd-2.6.23-13.img

title Windows XP

password --md5 [encrypted password]

rootnoverify (hd0,0)

chainloader +1

The default = option tells GRUB which image to boot by default after the timeout period. The splashimage option specifies the location of the image for use as the background for the GRUB GUI. The password option specified the MD-5 password to gain access to GRUB's interactive boot options. To generate an md5 password, run the tool grub-md5-crypt as root. Copy this into your grub-conf password—md5. You can create separate passwords for each entry in the file. The initrd option specifies the file that will be loaded at boot time as the initial RAM disk.

The rootnoverify option tells GRUB to not try to vary the root of the OS. The chainloader+1 tells GRUB to use a chain loader to load Windows on the first partition of the first disk. It uses the blocklist notation to grab the first sector of the current partition with '+1'.

For other parameters refer to grub man pages.

Booting Fallback Systems

GRUB supports a fallback mechanism of booting one or more other entries if a default boot entry fails.

Suppose that you have three systems, "A," "B," and "C." "A" is a system that you want to boot by default. "B" is a backup system, which is supposed to boot safely. "C" is another backup system, which is used in cases where "B" is not working properly.

Let's suppose you want GRUB to boot the first system that is bootable among "A," "B," and "C." To do this, write configuration file like this:

default saved

timeout 10

fallback 1 2

title A

root (hd0,0)

kernel /kernel

savedefault fallback

title B

root (hd1,0)

kernel /kernel

savedefault fallback

title C

root (hd2,0)

kernel /kernel


GRUB will boot a saved entry by default and save a fallback entry as next boot entry.

When GRUB tries to boot "A', GRUB saves "1' as next boot entry, because the fallback command

specifies that "1' is the first fallback entry. The entry "1' is "B', so GRUB will try to boot "B" at next boot time if "A" fails.

Likewise, when GRUB tries to boot "B," GRUB saves "2" as next boot entry, because fallback specifies "2" as next fallback entry. GRUB will boot "C" after booting "B."

You need to run grub-set-default when "A" starts correctly or you fix "A" after it crashes, since GRUB always sets next boot entry to a fallback entry. You should run this command in a startup script such as rc.local to boot "A" by default:

# grub-set-default 0

where "0" is the number of the boot entry for the system "A."


Let's suppose you installed GRUB, a third party boot manager program, on a Windows XP-based machine. When you try to start this computer after an unsuccessful upgrade to Windows Vista, the computer does not start. Instead, a black screen appears together with a blinking underscore. The Windows Vista Setup program does not restore GRUB.

To fix this problem, use the Windows XP Recovery Console to write a new boot sector to the system partition. To do this, follow these steps:

  1. Use the Windows XP CD to start the computer.

  2. At the Welcome to Setup screen, press R to repair Windows.

  3. Log on to the Windows XP installation that you want to repair.

  4. Type fixboot, and then press ENTER.

  5. Type y, and then press ENTER to confirm that you want to write a new boot sector to the system partition. When you do this, the following information appears:
    The new bootsector was successfully written.

  6. Type exit, and then press ENTER to exit the Recovery Console.

  7. Restart the computer, and then finish the Windows Vista upgrade operation.

  8. Reinstall the GRUB boot manager program.

Which Is Better? GRUB or LILO

LILO is older and less powerful. Originally LILO did not include a GUI menu choice (but did provide a text user interface). To work with LILO an administrator has many tasks to perform in addition to editing the configuration files.

GRUB is a bit easier to administer because the GRUB loader is smart enough to locate the /boot/grub/grub.conf file when booting. An administrator only needs to install GRUB once, using the "grub-install" utility. Any changes made to grub.conf will be automatically used when the system is next booted. In contrast, any changes made to lilo.conf are not read at boot time. The MBR needs to be "refreshed."

Like GRUB does, LILO has no interactive command interface and does not support booting from a network. If LILO MBR is configured correctly, the LILO system becomes unbootable. If the GRUB configuration file is configured incorrectly, it will default to the GRUB command-line interface without risking of making the system unbootable.

LILO and GRUB allows users—the root users—to boot into single-user mode. Both have a password protection feature with a difference. While GRUB allows for MD5 encrypted passwords, LILO manages only text passwords, which anyone can read from the lilo.conf file with the command cat /etc/lilo.conf.

For the novice, start with LILO and then migrate to GRUB. Source: