Setting Up a Linux Modem

Almost all modems manufactured today are software modems, usually referred to as "winmodems". Even though we pay a lot for a winmodem, they are cheap to manufacture because they use very little electronics. The functions that should be performed in hardware are emulated by software. This places an extra processing burden on your computer's CPU. Winmodems will not work with Linux unless you can locate a special "Linmodem" driver.

A hardware modem contains its own on-board controller and DSP circuits. This takes a major processing load off your computer's CPU. A hardware modem will make your dial-up connection work much faster. Hardware modems are difficult to find and very expensive. Hardware modems will work with Linux.

Some hardware modems known to work with Linux:

Zoom 2920 Fax Modem 56K PCI $76.00
Actiontec PCI5601201CW 56K Voice Faxmodem PCI $75.00
ActionTec PCIV921201CW Call Waiting Internal V.90/V.92 Modem $59.99

On rare occasions Linux will locate and configure your modem during installation, but most likely you will have to configure it manually. If your computer is plug-and-play (PnP) compatible, the BIOS should detect the modem on power-up and allocate resources to it. To determine which resources were allocated to the modem, log in as root and click on the Terminal emulation program button on the task bar. In the terminal window that appears, type the following command:

cat /proc/pci

In the screen output that results, locate the entry for your modem. Below is a possible example:

Bus 0, device 9, function 0:
Unknown class: Lucent (ex-AT&T) Microelectronics
Unknown device (rev 0).
Vendor id=11c1. Device id=480.
Medium devsel. Fast back-to-back capable. IRQ 11
Master Capable. No bursts. Min Gnt=252. Max Lat=14
Non-prefetchable 32 bit memory at 0x80100000 [0x8010000].
I/O at 0xdc00 [0xdc01]
I/O at 0xe000[0xe001]
I/O at 0xe400[0xe401]

Record the IRQ number and the first I/O address.

Linux uses a device file to communicate with a modem. Device files are located in the /dev directory. A modem must use one of the serial ports (/dev/ttyS0 - /dev/ttyS3). First determine which serial port to use for the modem. You should use ttyS1 because ttyS0 is usually assigned to a back panel connector.

To configure the serial port, use the setserial command with the information that you recorded above. Using the example values above, you would type the following into the terminal window:

setserial /dev/ttyS1 uart 16550A port 0xdc00 irq 11

You can verify that the modem is working by sending it the command to dial. For example type the following into the terminal window:

echo "atdt5555555" > /dev/ttyS1

If you hear the modem dial, close the connection by typing:

echo "atz" > /dev/ttyS1

If you didn't hear the modem dial, make sure you have the modem speaker turned on by typing:

echo "atv" > /dev/ttyS1

Then try dialing again.

To have Linux automatically configure your modem at boot time, add the setserial line that you used above to the file /etc/rc.d/rc.local

Assuming that you are using the GNOME window manager, click on the "foot" icon on the taskbar to open the menu. Select Programs and open the File Manager. In File Manager, navigate to the directory /etc/rc.d and right-click on the file rc.local. Select "Open with..." in the popup menu. In the "gmc" dialog box, select gnotepad+ and click on the OK button. At the bottom of the file, type the setserial command line and then save the file.

Learn more at

More Windows Administration Information:
• Tips for top: Monitoring CPU load on Linux
• Understanding Linux Filesystems: Ext4 and Beyond
• Setting Up a Linux Modem
• What is Ubuntu?
• 7 Steps to Securing Your Linux Server
• Linux Installation CDs vs. Linux "Live" CDs
• View Your Linux Server's Network Connections With Netstat
• You Can Switch to Linux!
• Setting Up a Basic Ethernet LAN on a Linux PC
• Welcome to the world of Knoppix