Andrew Hudson Paul Hudson Ubuntu UNLEASHED 2008 Edition 800 East 96th Street, Indianapolis, Indiana 46240 USA Ubuntu Unleashed 2008 Edition Acquisitions Editor Mark Taber Copyright © 2009 by Sams Publishing All rights reserved. No part of this book shall be reproduced, stored in a retrieval Development Editor system, or transmitted by any means, electronic, mechanical, photocopying, recording, Michael Thurston or otherwise, without written permission from the publisher. No patent liability is assumed with respect to the use of the information contained herein. Although every Managing Editor precaution has been taken in the preparation of this book, the publisher and author Patrick Kanouse assume no responsibility for errors or omissions. Nor is any liability assumed for damages resulting from the use of the information contained herein. Senior Project Editor ISBN-13: 978-0-672-32993-7 San Dee Phillips ISBN-10: 0-672-32993-X Library of Congress Cataloging-in-Publication Data: Copy Editor Hudson, Andrew, 1978- Paula Lowell Ubuntu unleashed 2008 edition : covering 8.04 and 8.10 / Andrew Indexer Hudson, Paul Hudson. -- 4th ed. Tim Wright p. cm. Includes index. Proofreader Leslie Joseph ISBN 978-0-672-32993-7 (pbk. w/dvd) 1. Ubuntu (Electronic resource) 2. Linux. 3. Operating systems Technical Editor (Computers) I. Hudson, Paul, 1979- II. Title. Dallas Releford QA76.76.O63H81666 2008 Publishing 005.4'32--dc22 Coordinator 2008021150 Vanessa Evans Printed in the United States of America First Printing July 2008 Multimedia Developer Trademarks Dan Scherf All terms mentioned in this book that are known to be trademarks or service marks Cover and Interior have been appropriately capitalized. Sams Publishing cannot attest to the accuracy of Designer this information. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark. Gary Adair Warning and Disclaimer Composition Every effort has been made to make this book as complete and as accurate as possi- Mark Shirar ble, but no warranty or fitness is implied. The information provided is on an "as is" basis. The authors and the publisher shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book or from the use of the CD or programs accompanying it. Bulk Sales Sams Publishing offers excellent discounts on this book when ordered in quantity for bulk purchases or special sales. For more information, please contact: U.S. Corporate and Government Sales 1-800-382-3419 corpsales@pearsontechgroup.com For sales outside of the U.S., please contact: International Sales international@pearson.com Contents at a Glance Introduction 1 Part I Installation and Configuration Installing Ubuntu..........................................................................................11 1 Post-Installation Configuration ....................................................................25 2 Working with Gnome ...................................................................................51 3 Command Line Quickstart ...........................................................................79 4 Part II Desktop Ubuntu On the Internet ...........................................................................................113 5 Productivity Applications ...........................................................................133 6 Multimedia Applications ............................................................................153 7 Printing with Ubuntu .................................................................................185 8 Games..........................................................................................................197 9 Part III System Administration Managing Users...........................................................................................209 10 Automating Tasks........................................................................................233 11 System-Monitoring Tools............................................................................289 12 Backing Up ..................................................................................................301 13 Networking..................................................................................................325 14 Remote Access with SSH and Telnet...........................................................371 15 Part IV Ubuntu as a Server File and Print...............................................................................................381 16 Apache Web Server Management ...............................................................407 17 Remote File Serving with FTP .....................................................................439 18 Handling Electronic Mail............................................................................471 19 Proxying and Reverse Proxying ..................................................................489 20 Administering Database Services ................................................................499 21 LDAP............................................................................................................525 22 Part V Programming Linux Using Perl ....................................................................................................537 23 Working with Python .................................................................................561 24 Writing PHP Scripts.....................................................................................579 25 C/C++ Programming Tools for Ubuntu......................................................613 26 Mono ...........................................................................................................625 27 Part VI Ubuntu Housekeeping Securing Your Machines .............................................................................639 28 Performance Tuning....................................................................................651 29 Command Line Masterclass........................................................................663 30 Managing Software .....................................................................................689 31 Kernel and Module Management...............................................................701 32 Part VII Appendixes Ubuntu Under the Hood ............................................................................727 A Installation Resources .................................................................................737 B Ubuntu and Linux Internet Resources .......................................................759 C Index ............................................................................................................??? Table of Contents Introduction 1 Part I Installation and Configuration 1 Installing Ubuntu 11 Before You Begin the Installation.................................................................11 Researching Your Hardware Specifications .........................................12 Installation Options.............................................................................12 Planning Partition Strategies ...............................................................12 The Boot Loader ..................................................................................13 Installing from CD or DVD .................................................................13 Step-by-Step Installation ...............................................................................13 Starting the Install ...............................................................................14 First Update..........................................................................................20 Wubi-The Easy Installer for Windows ..............................................22 Shutting Down ....................................................................................24 Reference .......................................................................................................24 2 Post-Installation Configuration 25 Troubleshooting Post-Installation Configuration Problems ........................26 The sudo command ......................................................................................27 First Update ...................................................................................................28 Configuring Software Repositories ...............................................................30 Installing Graphics Drivers ...........................................................................33 Changing Ubuntu's Look and Feel ...............................................................34 Changing the Desktop Background ....................................................34 Changing Colors..................................................................................35 Modifying System Fonts ......................................................................36 Changing How Menus Look ...............................................................36 Visual Effects........................................................................................37 Preferred Behaviors .......................................................................................37 Preferred Applications .........................................................................37 Removable Drives and Media..............................................................39 Input Devices ................................................................................................39 Keyboard Shortcuts..............................................................................40 Keyboard Layout..................................................................................40 Mouse...................................................................................................41 Detecting and Configuring a Modem ..........................................................42 Configuring a Serial-Port Modem .......................................................42 Configuring WinModems for Laptops ................................................42 Ubuntu Unleashed 2008 Edition vi Configuring Power Management in Ubuntu ...............................................43 Setting the Date and Time............................................................................44 Using the date Command ...................................................................45 Using the hwclock Command ............................................................45 Changing the Time and Date..............................................................46 Configuring and Using CD, DVD, and CD-RW Drives................................46 Checking Drive Assignment................................................................47 Configuring Wireless Networks ....................................................................48 Reference .......................................................................................................49 3 Working with Gnome 51 The Gnome Desktop Environment ..............................................................52 Gnome: The GNU Network Object Model Environment...................52 Eye Candy for the Masses .............................................................................54 Basic X Concepts...........................................................................................55 Using X..........................................................................................................56 Elements of the xorg.conf File ............................................................57 Configuring X......................................................................................62 Starting X ......................................................................................................64 Using a Display Manager.....................................................................65 Changing Window Managers..............................................................73 KDE-The Other Environment.....................................................................77 XFce...............................................................................................................78 Reference .......................................................................................................78 4 Command Line Quickstart 79 What Is the Command Line? .......................................................................79 Navigating Through the File System...................................................83 Managing Files with the Shell .............................................................85 Working with Compressed Files..........................................................86 Use Essential Commands from the /bin and /sbin Directories ..........87 Use and Edit Files in the /etc Directory ..............................................87 Protect the Contents of User Directories-/home ..............................87 Use the Contents of the /proc Directory to Interact with the Kernel..................................................................................87 Work with Shared Data in the /usr Directory.....................................89 Temporary File Storage in the /tmp Directory....................................89 Access Variable Data Files in the /var Directory .................................89 Logging In to and Working with Linux .......................................................90 Text-based Console Login....................................................................90 Logging Out .........................................................................................90 Contents vii Logging In and Out from a Remote Computer ..................................91 Using Environment Variables..............................................................92 Using the Text Editors ..................................................................................95 Working with vi...................................................................................96 Working with emacs ............................................................................97 Working with Permissions ............................................................................99 Assigning Permissions .......................................................................100 Directory Permissions ........................................................................101 Understanding Set User ID and Set Group ID Permissions ..............103 Working as Root..........................................................................................104 Creating Users....................................................................................105 Deleting Users ....................................................................................106 Shutting Down the System ...............................................................106 Rebooting the System........................................................................107 Reading Documentation.............................................................................108 Using Man Pages................................................................................108 Reference .....................................................................................................110 Part II Desktop Ubuntu 5 On the Internet 113 Getting Started with Firefox .......................................................................114 Choosing an Email Client ..........................................................................115 Evolution ...........................................................................................116 Mozilla Thunderbird..........................................................................118 KMail..................................................................................................120 Other Mail Clients .............................................................................120 RSS Readers..................................................................................................120 Firefox ................................................................................................122 Liferea.................................................................................................122 Instant Messaging with Pidgin ...................................................................123 Internet Relay Chat.....................................................................................124 Usenet Network Newsgroups......................................................................127 The Pan News Client Newsreader...............................................................128 Videoconferencing with Ekiga....................................................................130 Reference .....................................................................................................132 6 Productivity Applications 133 Introducing OpenOffice.org .......................................................................134 Configuring OpenOffice.org .............................................................136 Working with OpenOffice.org Writer ...............................................137 Working with OpenOffice.org Calc...................................................140 Ubuntu Unleashed 2008 Edition viii Office Suites for Ubuntu .............................................................................144 Working with Gnome Office.............................................................146 Working with KOffice........................................................................149 Productivity Applications Written for Microsoft Windows .......................150 Reference .....................................................................................................152 7 Multimedia Applications 153 Sound and Music ........................................................................................153 Sound Cards.......................................................................................154 Adjusting Volume ..............................................................................155 Sound Formats ...................................................................................156 Listening to Music .............................................................................157 Graphics Manipulation...............................................................................163 The GNU Image Manipulation Program...........................................163 Using Scanners in Ubuntu ................................................................164 Working with Graphics Formats .......................................................166 Capturing Screen Images ...................................................................168 Using Digital Cameras with Ubuntu ..........................................................168 Handheld Digital Cameras ................................................................168 Using F-Spot.......................................................................................169 Burning CDs and DVDs in Ubuntu............................................................170 Creating CDs and DVDs with Ubuntu's Graphical Clients..............172 Creating CDs from the Command Line ...........................................174 Creating DVDs from the Command Line.........................................176 Viewing Video .............................................................................................178 TV and Video Hardware ....................................................................178 Video Formats ....................................................................................180 Viewing Video in Linux.....................................................................181 Personal Video Recorders ..................................................................181 DVD and Video Players .....................................................................182 Reference .....................................................................................................182 8 Printing with Ubuntu 185 Overview of Ubuntu Printing.....................................................................185 Configuring and Managing Print Services .................................................187 GUI-Based Printer Configuration Quickstart ....................................187 Managing Printing Services ...............................................................188 Creating and Configuring Local Printers ...................................................189 Creating the Print Queue ..................................................................190 Editing Printer Settings......................................................................192 Reference .....................................................................................................195 Contents ix 9 Games 197 Linux Gaming .............................................................................................197 Installing Proprietary Video Drivers..................................................198 Installing Games in Ubuntu .......................................................................199 DOOM 3 ............................................................................................200 Unreal Tournament 2004 ..................................................................201 Quake 4 ..............................................................................................202 Wolfenstein: Enemy Territory ...........................................................203 Battle for Wesnoth.............................................................................204 Playing Windows Games with Cedega.......................................................204 Reference .....................................................................................................205 Part III System Administration 10 Managing Users 209 User Accounts .............................................................................................209 The Super User/Root User .................................................................210 User IDs and Group IDs ....................................................................212 File Permissions .................................................................................212 Managing Groups .......................................................................................213 Group Management Tools.................................................................214 Managing Users...........................................................................................216 User Management Tools ....................................................................216 Adding New Users .............................................................................218 Monitoring User Activity on the System ..........................................219 Managing Passwords ...................................................................................220 System Password Policy .....................................................................220 The Password File ..............................................................................220 Shadow Passwords .............................................................................221 Managing Password Security for Users..............................................223 Changing Passwords in a Batch ........................................................224 Granting System Administrator Privileges to Regular Users......................224 Temporarily Changing User Identity with the su Command ..........225 Granting Root Privileges on Occasion-The sudo Command .........227 Disk Quotas .................................................................................................229 Implementing Quotas .......................................................................230 Manually Configuring Quotas ..........................................................230 Reference .....................................................................................................232 Ubuntu Unleashed 2008 Edition x 11 Automating Tasks 233 Running Services at Bootup........................................................................234 Beginning the Boot Loading Process ..........................................................234 Loading the Linux Kernel..................................................................235 System Services and Runlevels ..........................................................236 Runlevel Definitions..........................................................................236 Booting into the Default Runlevel ....................................................237 Booting to a Non-Default Runlevel with GRUB ...............................237 Understanding init Scripts and the Final Stage of Initialization......238 Controlling Services at Boot with Administrative Tools ..................239 Changing Runlevels...........................................................................240 Troubleshooting Runlevel Problems .................................................240 Starting and Stopping Services Manually...................................................241 Scheduling Tasks .........................................................................................242 Using at and batch to Schedule Tasks for Later ................................242 Using cron to Run Jobs Repeatedly...................................................245 Basic Shell Control......................................................................................248 The Shell Command Line .................................................................248 Shell Pattern-Matching Support ........................................................250 Redirecting Input and Output...........................................................251 Piping Data ........................................................................................252 Background Processing ......................................................................252 Writing and Executing a Shell Script..........................................................253 Running the New Shell Program.......................................................254 Storing Shell Scripts for Systemwide Access......................................255 Interpreting Shell Scripts Through Specific Shells ............................256 Using Variables in Shell Scripts .........................................................258 Assigning a Value to a Variable .........................................................258 Accessing Variable Values ..................................................................259 Positional Parameters ........................................................................259 A Simple Example of a Positional Parameter ....................................259 Using Positional Parameters to Access and Retrieve Variables from the Command Line ................................................260 Using a Simple Script to Automate Tasks..........................................261 Built-In Variables ...............................................................................263 Special Characters..............................................................................263 Use Double Quotes to Resolve Variables in Strings with Embedded Spaces ............................................................................264 Using Single Quotes to Maintain Unexpanded Variables ................265 Using the Backslash as an Escape Character.....................................266 Using the Backtick to Replace a String with Output ........................266 Comparison of Expressions in pdksh and bash................................267 Contents xi Comparing Expressions with tcsh.....................................................272 The for Statement ..............................................................................276 The while Statement..........................................................................277 The until Statement...........................................................................279 The repeat Statement (tcsh) ..............................................................280 The select Statement (pdksh) ............................................................280 The shift Statement ...........................................................................281 The if Statement ................................................................................281 The case Statement ............................................................................283 The break and exit Statements ..........................................................285 Using Functions in Shell Scripts........................................................285 Reference .....................................................................................................287 12 System-Monitoring Tools 289 Console-Based Monitoring .........................................................................289 Using the kill Command to Control Processes.................................291 Using Priority Scheduling and Control.............................................292 Displaying Free and Used Memory with free ...................................294 Disk Space ..........................................................................................295 Disk Quotas........................................................................................296 Graphical Process and System Management Tools ....................................296 KDE Process- and System-Monitoring Tools ..............................................298 Reference .....................................................................................................299 13 Backing Up 301 Choosing a Backup Strategy .......................................................................301 Why Data Loss Occurs.......................................................................302 Assessing Your Backup Needs and Resources ....................................303 Evaluating Backup Strategies .............................................................304 Making the Choice ............................................................................307 Choosing Backup Hardware and Media .....................................................307 Removable Storage Media .................................................................308 Network Storage.................................................................................309 Tape Drive Backup .............................................................................309 Using Backup Software ...............................................................................310 tar: The Most Basic Backup Tool .......................................................310 The GNOME File Roller .....................................................................312 Using the Amanda Backup Application ............................................315 Alternative Backup Software..............................................................316 Copying Files...............................................................................................316 Copying Files Using tar .....................................................................317 Compressing, Encrypting, and Sending tar Streams ........................317 Ubuntu Unleashed 2008 Edition xii Copying Files Using cp......................................................................318 Copying Files Using mc.....................................................................318 System Rescue .............................................................................................319 The Ubuntu Rescue Disc....................................................................320 Backing Up and Restoring the Master Boot Record..........................320 Booting the System from a Generic Boot Floppy .............................320 Using a GRUB Boot Floppy ...............................................................321 Using the Recovery Facility ...............................................................322 Reference .....................................................................................................322 14 Networking 325 Laying the Foundation: The localhost Interface........................................326 Checking for the Availability of the Loopback Interface .................326 Configuring the Loopback Interface Manually ................................326 Networking with TCP/IP.............................................................................328 TCP/IP Addressing .............................................................................329 Using IP Masquerading in Ubuntu ...................................................331 Ports ...................................................................................................332 Network Organization ................................................................................333 Subnetting..........................................................................................333 Subnet Masks .....................................................................................334 Broadcast, Unicast, and Multicast Addressing ..................................334 Hardware Devices for Networking..............................................................335 Network Interface Cards....................................................................335 Network Cable ...................................................................................337 Hubs and Switches.............................................................................338 Routers and Bridges ...........................................................................339 Initializing New Network Hardware..................................................339 Using Network Configuration Tools...........................................................342 Command-Line Network Interface Configuration ...........................342 Network Configuration Files .............................................................347 Using Graphical Configuration Tools ...............................................349 Dynamic Host Configuration Protocol ......................................................351 How DHCP Works .............................................................................351 Activating DHCP at Installation and Boot Time ..............................352 DHCP Software Installation and Configuration ...............................353 Using DHCP to Configure Network Hosts ........................................354 Other Uses for DHCP.........................................................................357 Wireless Networking ...................................................................................357 Support for Wireless Networking in Ubuntu ....................................357 Advantages of Wireless Networking..................................................358 Choosing from Among Available Wireless Protocols .......................359 Contents xiii Beyond the Network and onto the Internet ..............................................360 Common Configuration Information ........................................................360 Configuring Digital Subscriber Line Access................................................362 Understanding Point-to-Point Protocol over Ethernet .....................363 Configuring a PPPoE Connection Manually.....................................363 Configuring Dial-Up Internet Access .........................................................365 Configuring a Dial-Up Connection Manually ..................................365 Troubleshooting Connection Problems .....................................................368 Reference .....................................................................................................369 15 Remote Access with SSH and Telnet 371 Setting Up a Telnet Server...........................................................................371 Telnet Versus SSH ........................................................................................372 Setting Up an SSH Server ............................................................................372 The SSH Tools..............................................................................................373 Using scp to Copy Individual Files Between Machines....................374 Using sftp to Copy Many Files Between Machines ..........................374 Using ssh-keygen to Enable Key-based Logins..................................375 Remote X.....................................................................................................377 XDMCP ..............................................................................................377 VNC....................................................................................................378 Reference .....................................................................................................378 Part IV Ubuntu as a Server 16 File and Print 381 Using the Network File System...................................................................382 Installing and Starting or Stopping NFS ...........................................382 NFS Server Configuration ..................................................................383 NFS Client Configuration..................................................................384 Putting Samba to Work...............................................................................385 Manually Configuring Samba with /etc/samba/smb.conf................387 Testing Samba with the testparm Command ...................................390 Starting the smbd Daemon ...............................................................390 Mounting Samba Shares ....................................................................391 Configuring Samba Using SWAT.......................................................392 Network and Remote Printing with Ubuntu..............................................397 Creating Network Printers ..........................................................................397 Enabling Network Printing on a LAN ...............................................397 Session Message Block Printing .........................................................398 Using the Common UNIX Printing System GUI .......................................399 Creating a CUPS Printer Entry ..........................................................400 Ubuntu Unleashed 2008 Edition xiv Avoiding Printer Support Problems............................................................403 All-in-One (Print/Fax/Scan) Devices .................................................403 Using USB and Legacy Printers .........................................................403 Reference .....................................................................................................405 17 Apache Web Server Management 407 About the Apache Web Server ....................................................................407 Installing the Apache Server.......................................................................409 Installing with APT............................................................................409 Building the Source Yourself .............................................................410 Starting and Stopping Apache ....................................................................413 Starting the Apache Server Manually................................................413 Using /etc/init.d/apache2 ..................................................................414 Runtime Server Configuration Settings......................................................416 Runtime Configuration Directives ....................................................416 Editing apache2.conf .........................................................................417 Apache Multiprocessing Modules .....................................................419 Using .htaccess Configuration Files ..................................................420 File System Authentication and Access Control ........................................422 Restricting Access with allow and deny............................................422 Authentication...................................................................................423 Final Words on Access Control .........................................................425 Apache Modules..........................................................................................426 mod_access ........................................................................................427 mod_alias ...........................................................................................427 mod_asis ............................................................................................427 mod_auth...........................................................................................428 mod_auth_anon.................................................................................428 mod_auth_dbm .................................................................................428 mod_auth_digest ...............................................................................428 mod_autoindex..................................................................................429 mod_cgi..............................................................................................429 mod_dir and mod_env ......................................................................429 mod_expires.......................................................................................429 mod_headers......................................................................................429 mod_include ......................................................................................429 mod_info and mod_log_config .........................................................430 mod_mime and mod_mime_magic ..................................................430 mod_negotiation ...............................................................................430 mod_proxy.........................................................................................430 mod_rewrite .......................................................................................430 mod_setenvif .....................................................................................430 Contents xv mod_speling.......................................................................................431 mod_status.........................................................................................431 mod_ssl ..............................................................................................431 mod_unique_id..................................................................................431 mod_userdir .......................................................................................431 mod_usertrack....................................................................................431 mod_vhost_alias ................................................................................431 Virtual Hosting............................................................................................432 Address-Based Virtual Hosts ..............................................................432 Name-Based Virtual Hosts .................................................................432 Logging........................................................................................................434 Other Web Servers for Use with Ubuntu....................................................435 Sun ONE Web Server .........................................................................436 Zope ...................................................................................................436 Zeus Web Server.................................................................................436 Reference .....................................................................................................437 18 Remote File Serving with FTP 439 Choosing an FTP Server..............................................................................439 Choosing an Authenticated or Anonymous Server ..........................440 Ubuntu FTP Server Packages .............................................................440 Other FTP Servers ..............................................................................440 Installing FTP Software ...............................................................................441 The FTP User ...............................................................................................442 inetd Configuration for wu-ftpd ................................................................444 Starting the Very Secure FTP Server (vsftpd) Package .......................445 Configuring the Very Secure FTP Server.....................................................445 Controlling Anonymous Access ........................................................445 Other vsftpd Server Configuration Files ...........................................446 Configuring the Server ...............................................................................448 Using Commands in the ftpaccess File to Configure wu-ftpd...................448 Configure Access Control..................................................................449 Configure User Information..............................................................452 Configure System Logging ................................................................456 Configure Permission Control ..........................................................457 Configure Commands Directed Toward the cdpath.........................459 Structure of the shutdown File..........................................................460 Configuring FTP Server File-Conversion Actions.......................................460 Strip Prefix .........................................................................................461 Strip Postfix........................................................................................461 Add-On Prefix ....................................................................................461 Add-On Postfix ..................................................................................461 Ubuntu Unleashed 2008 Edition xvi External Command ...........................................................................461 An Example of Conversions in Action..............................................462 Using the ftphosts File to Allow or Deny FTP Server Connection ............463 Using Commands for Server Administration.............................................464 Display Information About Connected Users...................................464 Count the Number of Connections ..................................................465 Use /usr/sbin/ftpshut to Schedule FTP Server Downtime ................466 Use /var/log/xferlog to View a Log of Server Transactions...............467 Reference .....................................................................................................470 19 Handling Electronic Mail 471 How Email Is Sent and Received ................................................................471 The Mail Transport Agent..................................................................472 Choosing an MTA..............................................................................474 The Mail Delivery Agent ...................................................................474 The Mail User Agent ..........................................................................475 Basic Postfix Configuration and Operation ...............................................476 Configuring Masquerading ...............................................................477 Using Smart Hosts .............................................................................477 Setting Message Delivery Intervals....................................................477 Mail Relaying .....................................................................................478 Forwarding Email with Aliases ..........................................................478 Using Fetchmail to Retrieve Mail ...............................................................479 Installing Fetchmail...........................................................................479 Configuring Fetchmail ......................................................................480 Choosing a Mail Delivery Agent ................................................................483 Procmail .............................................................................................483 Spamassassin......................................................................................484 Squirrelmail........................................................................................484 Virus Scanners....................................................................................484 Mail Daemons .............................................................................................485 Alternatives to Microsoft Exchange Server.................................................485 Microsoft Exchange Server/Outlook Client ......................................486 CommuniGate Pro.............................................................................486 Oracle Collaboration Suite ................................................................486 Bynari.................................................................................................486 Open-Xchange ...................................................................................486 phpgroupware....................................................................................487 PHProjekt ...........................................................................................487 Horde .................................................................................................487 Reference .....................................................................................................488 Contents xvii 20 Proxying and Reverse Proxying 489 What Is a Proxy Server? ..............................................................................489 Installing Squid ...........................................................................................490 Configuring Clients ....................................................................................490 Access Control Lists ....................................................................................491 Specifying Client IP Addresses....................................................................495 Example Configurations .............................................................................496 Reference .....................................................................................................498 21 Administering Database Services 499 A Brief Review of Database Basics ..............................................................500 How Relational Databases Work .......................................................501 Understanding SQL Basics.................................................................503 Creating Tables ..................................................................................503 Inserting Data into Tables .................................................................504 Retrieving Data from a Database.......................................................505 Choosing a Database: MySQL Versus PostgreSQL......................................507 Speed ..................................................................................................507 Data Locking......................................................................................508 ACID Compliance in Transaction Processing to Protect Data Integrity .................................................................509 SQL Subqueries ..................................................................................509 Procedural Languages and Triggers ...................................................510 Configuring MySQL ....................................................................................510 Setting a Password for the MySQL Root User ...................................511 Creating a Database in MySQL .........................................................511 Granting and Revoking Privileges in MySQL ...................................512 Configuring PostgreSQL .............................................................................513 Initializing the Data Directory in PostgreSQL ..................................514 Creating a Database in PostgreSQL ...................................................515 Creating Database Users in PostgreSQL ............................................516 Deleting Database Users in PostgreSQL ............................................517 Granting and Revoking Privileges in PostgreSQL .............................517 Database Clients..........................................................................................518 SSH Access to a Database...................................................................518 Local GUI Client Access to a Database .............................................520 Web Access to a Database..................................................................520 The MySQL Command-Line Client ..................................................521 The PostgreSQL Command-Line Client ............................................523 Graphical Clients ...............................................................................523 Reference .....................................................................................................524 Ubuntu Unleashed 2008 Edition xviii 22 LDAP 525 Configuring the Server ...............................................................................526 Populating Your Directory.................................................................528 Configuring Clients ....................................................................................530 Evolution ...........................................................................................531 Thunderbird.......................................................................................532 Administration ............................................................................................532 Reference .....................................................................................................533 Part V Programming Linux 23 Using Perl 537 Using Perl with Linux .................................................................................537 Perl Versions ......................................................................................538 A Simple Perl Program.......................................................................538 Perl Variables and Data Structures..............................................................540 Perl Variable Types.............................................................................540 Special Variables.................................................................................541 Operators.....................................................................................................542 Comparison Operators ......................................................................542 Compound Operators........................................................................543 Arithmetic Operators .........................................................................544 Other Operators .................................................................................544 Special String Constants ....................................................................545 Conditional Statements: if/else and unless ................................................545 if .........................................................................................................546 unless .................................................................................................546 Looping .......................................................................................................547 for.......................................................................................................547 foreach ...............................................................................................547 while ..................................................................................................548 until ...................................................................................................548 last and next ......................................................................................548 do ... while and do ... until ...............................................................549 Regular Expressions.....................................................................................549 Access to the Shell ......................................................................................550 Modules and CPAN .....................................................................................551 Code Examples............................................................................................552 Sending Mail ......................................................................................552 Purging Logs ......................................................................................554 Posting to Usenet...............................................................................555 Contents xix One-Liners .........................................................................................556 Command-Line Processing................................................................556 Reference .....................................................................................................557 24 Working with Python 561 Python on Linux.........................................................................................561 Getting Interactive.............................................................................562 The Basics of Python...................................................................................563 Numbers.............................................................................................563 More on Strings .................................................................................564 Lists ....................................................................................................567 Dictionaries........................................................................................569 Conditionals and Looping ................................................................570 Functions.....................................................................................................572 Object Orientation......................................................................................573 Class and Object Variables ................................................................574 Constructors and Destructors............................................................575 Class Inheritance ...............................................................................575 The Standard Library and the Vaults of Parnassus ....................................577 Reference .....................................................................................................577 25 Writing PHP Scripts 579 Introduction to PHP ...................................................................................580 Entering and Exiting PHP Mode .......................................................580 Variables.............................................................................................580 Arrays .................................................................................................582 Constants ...........................................................................................584 References ..........................................................................................584 Comments .........................................................................................585 Escape Sequences ...............................................................................585 Variable Substitution .........................................................................587 Operators ...........................................................................................587 Conditional Statements.....................................................................589 Special Operators ...............................................................................591 Switching ...........................................................................................592 Loops..................................................................................................593 Including Other Files.........................................................................596 Basic Functions ...........................................................................................596 Strings ................................................................................................596 Arrays .................................................................................................600 Files ....................................................................................................602 Miscellaneous.....................................................................................604 Ubuntu Unleashed 2008 Edition xx Handling HTML Forms ...............................................................................607 Databases.....................................................................................................608 Introduction to PEAR::DB .................................................................608 Reference .....................................................................................................610 26 C/C++ Programming Tools for Ubuntu 613 Programming in C with Linux ...................................................................613 Using the C Programming Project Management Tools Provided with Ubuntu..............................................................................614 Building Programs with make ...........................................................615 Using Makefiles..................................................................................615 Using the autoconf Utility to Configure Code .................................617 Managing Software Projects with Subversion ...................................617 Debugging Tools ................................................................................618 Using the GNU C Compiler .......................................................................619 Graphical Development Tools ....................................................................620 Using the KDevelop Client................................................................620 The Glade Client for Developing in GNOME...................................621 Reference .....................................................................................................623 27 Mono 625 Why Use Mono? .........................................................................................625 Mono on the Command Line ....................................................................626 The Structure of a C# Program..........................................................628 Printing Out the Parameters..............................................................629 Creating Your Own Variables ............................................................629 Adding Some Error Checking ............................................................630 Building on Mono's Libraries .....................................................................631 Searching with Beagle........................................................................631 Creating a GUI with Gtk# .................................................................634 Reference .....................................................................................................636 Part VI Ubuntu Housekeeping 28 Securing Your Machines 639 Understanding Computer Attacks ..............................................................639 Assessing Your Vulnerability.......................................................................641 Protecting Your Machine ............................................................................642 Securing a Wireless Network .............................................................642 Passwords and Physical Security .......................................................643 Configuring and Using Tripwire .......................................................644 Devices ...............................................................................................645 Contents xxi Viruses .........................................................................................................645 Configuring Your Firewall...........................................................................646 Forming a Disaster Recovery Plan ..............................................................647 Keeping Up-to-Date on Linux Security Issues ............................................648 Reference .....................................................................................................649 29 Performance Tuning 651 Hard Disk ....................................................................................................651 Using the BIOS and Kernel to Tune the Disk Drives ........................652 The hdparm Command.....................................................................653 File System Tuning ............................................................................654 The tune2fs Command......................................................................654 The e2fsck Command........................................................................655 The badblocks Command .................................................................655 Disabling File Access Time.................................................................655 Kernel ..........................................................................................................655 Apache.........................................................................................................656 MySQL.........................................................................................................658 Measuring Key Buffer Usage..............................................................658 Using the Query Cache .....................................................................660 Miscellaneous Tweaks........................................................................661 Query Optimization ..........................................................................661 Reference .....................................................................................................662 30 Command Line Masterclass 663 Why Use the Shell?.....................................................................................664 Basic Commands.........................................................................................665 Printing the Contents of a File with cat ...........................................666 Changing Directories with cd ...........................................................667 Changing File Access Permissions with chmod................................668 Copying Files with cp........................................................................669 Printing Disk Usage with du .............................................................669 Finding Files by Searching with find ................................................670 Searches for a String in Input with grep ...........................................673 Paging Through Output with less .....................................................674 Creating Links Between Files with ln................................................676 Finding Files from an Index with locate...........................................677 Listing Files in the Current Directory with ls ...................................678 Reading Manual Pages with man ......................................................679 Making Directories with mkdir .........................................................680 Moving Files with mv........................................................................680 Listing Processes with ps ...................................................................680 Ubuntu Unleashed 2008 Edition xxii Deleting Files and Directories with rm .............................................681 Printing the Last Lines of a File with tail..........................................682 Printing Resource Usage with top .....................................................682 Printing the Location of a Command with which...........................684 Combining Commands ..............................................................................684 Multiple Terminals......................................................................................686 Reference .....................................................................................................687 31 Managing Software 689 Using Add/Remove Applications for Software Management.....................689 Using Synaptic for Software Management .................................................691 Staying Up-to-Date......................................................................................693 Working on the Command Line ................................................................694 Day-to-Day Usage ..............................................................................694 Finding Software................................................................................697 Compiling Software from Source ...............................................................698 Reference .....................................................................................................699 32 Kernel and Module Management 701 The Linux Kernel ........................................................................................702 The Linux Source Tree .......................................................................702 Types of Kernels.................................................................................704 Managing Modules .....................................................................................706 When to Recompile ....................................................................................708 Kernel Versions ...........................................................................................708 Obtaining the Kernel Sources .....................................................................709 Patching the Kernel ....................................................................................710 Compiling the Kernel .................................................................................712 Using xconfig to Configure the Kernel.............................................717 Creating an Initial RAM Disk Image .................................................720 When Something Goes Wrong...................................................................721 Errors During Compile ......................................................................721 Runtime Errors, Boot Loader Problems, and Kernel Oops ...............722 Reference .....................................................................................................723 Part VII Appendixes A Ubuntu Under the Hood 727 What Is Linux?............................................................................................727 Why Use Linux?..........................................................................................729 What Is Ubuntu?.........................................................................................730 Roots of Ubuntu ................................................................................730 Contents xxiii Ubuntu for Business....................................................................................731 Ubuntu in Your Home ................................................................................732 64-Bit Ubuntu .............................................................................................733 Ubuntu on the PPC Platform .....................................................................733 Getting the Most from Ubuntu and Linux Documentation .....................733 Ubuntu Developers and Documentation ...................................................735 Reference .....................................................................................................735 B Installation Resources 737 Planning Your Ubuntu Deployment ..........................................................738 Business Considerations ....................................................................738 System Considerations ......................................................................741 User Considerations...........................................................................742 A Predeployment Planning Checklist ...............................................742 Planning the Installation...................................................................742 Hardware Requirements..............................................................................743 Meeting the Minimum Ubuntu Hardware Requirements ................743 Using Legacy Hardware .....................................................................744 Planning for Hard Drive Storage for Your Ubuntu Installation .......744 Checking Hardware Compatibility ...................................................745 Preparing for Potential Hardware Problems......................................746 Preparing and Using a Hardware Inventory .....................................749 Preparing for the Install Process .................................................................750 Preparing to Install from a CD-ROM ................................................753 Partitioning Before and During Installation ..............................................754 Choosing a Partitioning Scheme.......................................................756 Hosting Parts of the Linux File System on Separate Partitions ........756 Reference .....................................................................................................757 C Ubuntu and Linux Internet Resources 759 Websites and Search Engines ......................................................................760 Web Search Tips.................................................................................760 Google Is Your Friend ........................................................................761 Ubuntu Package Listings ...................................................................761 Certification .......................................................................................761 Commercial Support..........................................................................762 Documentation..................................................................................762 Linux Guides......................................................................................763 Ubuntu...............................................................................................763 Mini-CD Linux Distributions ............................................................763 Various Intel-Based Linux Distributions ...........................................764 Ubuntu Unleashed 2008 Edition xxiv PowerPC-Based Linux Distributions..................................................764 Linux on Laptops and PDAs..............................................................765 The X Window System ......................................................................765 Usenet Newsgroups.....................................................................................765 Mailing Lists................................................................................................767 Ubuntu Project Mailing Lists.............................................................767 Internet Relay Chat.....................................................................................767 Index 769 About the Authors Andrew Hudson is a freelance journalist who specializes in writing about Linux. He has significant experience in Red Hat and Debian-based Linux distributions and deployments and can often be found sitting at his keyboard tweaking various settings and config files just for the hell of it. He lives in Wiltshire, which is a county of England, along with his wife, Bernice, and their son, John. Andrew does not like Emacs. He can be reached at andy.hudson@gmail.com. Paul Hudson is a recognized expert in open-source technologies. He is also a professional developer and full-time journalist for Future Publishing. His articles have appeared in Mac Format, PC Answers, PC Format, PC Plus, and Linux Format. Paul is passionate about free software in all its forms and uses a mix of Linux and BSD to power his desktops and servers. Paul likes Emacs. Paul can be contacted through http://hudzilla.org. Dedication To Bernice and John-the best supporters a man could ever wish for. -Andrew Hudson To World Peace-because this is about as close as I'm ever going to get to being in the Miss World competition. -Paul Hudson Acknowledgments Thanks to our colleagues at Sams Publishing, whose patience and persistence made this book possible. Thanks also to my family who have supported me during the writing of this book. My son John now has his own keyboard and mouse-the computer will come in a few years! My wife Bernice has the patience of a saint, allowing me to lock myself away when I needed to and being helpful when I've hit writer's block (and yes, it does happen!). Finally, thanks to God who makes all things possible, including this book. -Andrew Hudson Thanks to Andrew, Shelley, Damon, Seth, Dallas, Mum and Dad, my wife, Ildiko; and, of course, God, who made all this possible. No book this big could be done without a lot of work from a dedicated team! -Paul Hudson We Want to Hear from You! As the reader of this book, you are our most important critic and commentator. We value your opinion and want to know what we're doing right, what we could do better, what areas you'd like to see us publish in, and any other words of wisdom you're willing to pass our way. You can email or write me directly to let me know what you did or didn't like about this book-as well as what we can do to make our books stronger. Please note that I cannot help you with technical problems related to the topic of this book, and that due to the high volume of mail I receive, I might not be able to reply to every message. When you write, please be sure to include this book's title and author as well as your name and phone or email address. I will carefully review your comments and share them with the author and editors who worked on the book. Email: opensource@samspublishing.com Mail: Mark Taber Associate Publisher Sams Publishing 800 East 96th Street Indianapolis, IN 46240 USA Reader Services Visit our website and register this book at informit.com/register for convenient access to any updates, downloads, or errata that might be available for this book. This page intentionally left blank Introduction W elcome to Ubuntu Unleashed, 2008 Edition! This book covers the free Linux distribution named Ubuntu and includes a fully functional and complete operating system produced by the Ubuntu Community, sponsored by Canonical Software. This book covers Ubuntu version 8.04 LTS, commonly known as the Hardy Heron. Ubuntu directly descends from one of the oldest and most revered Linux distributions ever: Debian. Those of you who know nothing about Linux will likely not have heard of Debian; it is enough to know that it is considered to be one of the most stable and secure Linux distributions currently available. Ubuntu benefits directly from many contributions from free software developers across the world. If you are new to Linux, you have made a great decision by choosing this book. Sams Publishing's Unleashed books offer an in-depth look at their subject, taking in both beginner and advanced users and moving them to a new level of knowledge and expertise. Ubuntu is a fast-changing distrib- ution that can be updated at least twice a year. We have tracked the development of Ubuntu from early on to make sure that the information in this book mirrors closely the development of the distribution. A full copy of Ubuntu is included on the enclosed disc, making it possible for you to install Linux in less than an hour! No longer an upstart, Linux now has an enviable position in today's modern computing world. It can be found on machines as diverse as mobile phones and wristwatches, all the way up to super- computers-in fact, Linux currently runs on more than half of the world's top 500 supercomputers. Introduction 2 Do not let the reputation of Linux discourage you, however. Most people who have heard of Linux think that it is found only on servers, looking after websites and email. Nothing could be further from the truth because Linux is making huge inroads in to the desktop market, too. Corporations are realizing the benefits of running a stable and powerful oper- ating system that is easy to maintain and easy to secure. Add to that the hundreds of improvements in usability, and Linux becomes an attractive proposition that tempts many CIOs. The best part is that as large Linux vendors improve Linux, the majority of those improvements make it into freely available distributions, allowing you to benefit from the additions and refinements made. You can put Ubuntu to work today and be assured of a great user experience. This book provides all the information that you need to get up and running with Ubuntu. It even tells you how to keep Ubuntu running in top shape and how to adapt Ubuntu to changes in your own needs. You can use Ubuntu at home, in the workplace, or, with permission, at your school or college. In fact, you might want to poke around your school's computer rooms: You will probably find that someone has already beaten you to the punch-Linux is commonly found in academic institutions. Feel free to make as many copies of the software as you want; because Ubuntu is freely distributable all over the world, no copyright lawyers are going to pound on your door. After an introduction to Linux and Ubuntu, you will find out how to get started with Ubuntu, including installation and initial configuration. We also take you through installing software, managing users, and other common administrative tasks. For the more technically minded, we also cover some starting steps in programming across several languages-why not pick one and try it out? Throughout this book, you will also find information about multimedia applications, digital graphics, and even gaming (for after- hours when you are finished tinkering). After you make it through this book, you will be well equipped with the knowledge needed to use Linux successfully. We do assume that you are at least familiar with an operating system already (even if it is not with Linux) and have some basic computer knowledge. Licensing Software licensing is an important issue for all computer users and can entail moral, legal, and financial considerations. Many consumers think that purchasing a copy of a commer- cial or proprietary operating system, productivity application, utility, or game conveys ownership, but this is not true. In the majority of cases, the end user license agreement (EULA) included with a commercial software package states that you have paid only for the right to use the software according to specific terms. This generally means you may not examine, make copies, share, resell, or transfer ownership of the software package. More onerous software licenses enforce terms that preclude you from distributing or publishing comparative performance reviews of the software. Even more insidious licens- ing schemes (and supporting legislation, especially in the United States) contain provi- sions allowing onsite auditing of the software's use! What This Book Contains 3 This is not the case with the software included with this book. You are entirely free to make copies, share them with friends, and install the software on as many computers as you want-we encourage you to purchase additional copies of this book to give as gifts, however. Be sure to read the README file on the disc included with this book for impor- tant information regarding the included software and disk contents. After you install Ubuntu, go to http://www.gnu.org/licenses/gpl.html to find a copy of the GNU GPL. You will see that the GPL provides unrestricted freedom to use, duplicate, share, study, modify, improve, and even sell the software. You can put your copy of Ubuntu to work right away in your home or at your place of business without worrying about software licensing, per-seat workstation or client licenses, software auditing, royalty payments, or any other type of payments to third parties. However, be aware that although much of the software included with Ubuntu is licensed under the GPL, some packages on this book's disc are licensed under other terms. There is a variety of related software licenses, and many software packages fall under a broad defin- ition known as open source. Some of these include the Artistic License, the BSD License, the Mozilla Public License, and the Q Public License. For additional information about the various GNU software licenses, browse to http://www. gnu.org/. For a definition of open-source and licensing guidelines, along with links to the terms of nearly three dozen open-source licenses, browse to http://www.opensource.org/. Who This Book Is For This book is for anyone searching for guidance on using Ubuntu and primarily focuses on Intel-based PC platforms. Although the contents are aimed at intermediate to advanced users, even new users with a bit of computer savvy will benefit from the advice, tips, tricks, traps, and techniques presented in each chapter. Pointers to more detailed or related information are also provided at the end of each chapter. If you are new to Linux, you might need to learn some new computer skills, such as how to research your computer's hardware, how to partition a hard drive, and (occasionally) how to use a command line. This book helps you learn these skills and shows you how to learn more about your computer, Linux, and the software included with Ubuntu. System administrators with experience using other operating systems can use the information in this book to install, set up, and run common Linux software services, such as the Network File System (NFS), a File Transfer Protocol (FTP) server, and a web server (using Apache, among others). What This Book Contains Ubuntu Unleashed is organized into seven parts, covering installation and configuration, Ubuntu on the desktop, system administration, programming and housekeeping, and a reference section. A disc containing the entire distribution is included so that you have everything you need to get started. This book starts by covering the initial and essential tasks required to get Ubuntu installed and running on a target system. Introduction 4 If you are new to Linux, and more specifically Ubuntu, first read the chapters in Part I, "Installation and Configuration." You will get valuable information on the following: . Detailed steps that walk you through installation . Critical advice on key configuration steps to fully install and configure Linux to work with your system's subsystems or peripherals, such as pointers, keyboards, modems, USB devices and power management . Initial steps needed by new users transitioning from other computing environments . Working with GNOME, the default desktop environment for Ubuntu Part II, "Desktop Ubuntu," is aimed at users who want to get productive with Ubuntu and covers the following: . Discovering the many productivity applications that come with Ubuntu . Surfing the Internet and working with email and newsgroups . Using Ubuntu to listen to music and watch video . Using Ubuntu to download and manipulate images from digital cameras . Setting up local printers for Ubuntu . Understanding the current state of gaming for Linux Moving beyond the productivity and desktop areas of Ubuntu, Part III, "System Administration," covers the following: . Managing users and groups . Automating tasks and using shell scripts . Monitoring system resources and availability . Backup strategies and software . Network connectivity, including sharing folders and securing the network . Internet connectivity via dial-up and broadband connections Part IV, "Ubuntu as a Server" gives you the information you need to start building your own file, web and other servers for use in your home or office. . Building and deploying web servers . Database creation, management, and manipulation . File and print servers . Using FTP for serving files across the Internet and local networks . Building and deploying email servers using Postfix and managing mailing lists . Creating remote access gateways and services Conventions Used in This Book 5 . Configuring DNS for your network . Using LDAP for storing information on users and security Part V, "Programming Linux," provides a great introduction to how you can extend Ubuntu capabilities even further using the development tools supplied with it. This part covers the following: . Programming in Perl, using variables and scripting . An introduction to the Python language . Writing PHP scripts and linking them to databases . C and C++ programming tools available with Ubuntu and how to use the GNU C Compiler (gcc) Part VI, "Ubuntu Housekeeping," looks at some of the more advanced skills you need to keep your system running in perfect condition, including the following: . Securing your machine against attack from outsiders and viruses . Performance tuning . Command-line masterclass . Advanced apt . Kernel and module management and compilation An extensive reference in Part VII, "Appendixes," gives you scope to explore in even more depth some of the topics covered in this book as well as providing historical context to Ubuntu and installation resources. Conventions Used in This Book A lot of documentation is included with every Linux distribution, and Ubuntu is certainly no exception. Although the intent of Ubuntu Unleashed is to be as complete as possible, it is impossible to cover every option of every command included in the distribution. However, this book offers numerous tables of various options, commands, and keystrokes to help condense, organize, and present information about a variety of subjects. This edition is also packed full of screenshots to illustrate nearly all Ubuntu-specific graph- ical utilities-especially those related to system administration or the configuration and administration of various system and network services. Introduction 6 To help you better understand code listing examples and sample command lines, several formatting techniques are used to show input and ownership. For example, if the command or code listing example shows typed input, the input is formatted in boldface, as follows: $ ls If typed input is required, as in response to a prompt, the sample typed input also is in boldface, like so: Delete files? [Y/n] y All statements, variables, and text that should appear on your display use the same bold- face formatting. In addition, command lines that require root or super user access are pref- aced with the sudo command, as follows: $ sudo printtool & Command-line examples that any user can run are prefaced with a dollar sign ($), like so: $ ls The following elements provide you with useful tidbits of information that relate to the discussion of the text: NOTE A note provides additional information you might want to make note of as you are work- ing; augments a discussion with ancillary details; or points you to an article, a whitepa- per, or another online reference for more information about a specific topic. TIP A tip can contain special insight or a timesaving technique, as well as information about items of particular interest to you that you might not find elsewhere. CAUTION A caution warns you about pitfalls or problems before you run a command, edit a con- figuration file, or choose a setting when administering your system. Conventions Used in This Book 7 Sidebars Can Be Goldmines Just because it is in a sidebar does not mean that you will not find something new here. Be sure to watch for these elements that bring in outside content that is an aside to the discussion in the text. You will read about other technologies, Linux-based hardware, and special procedures to make your system more robust and efficient. Other formatting techniques used to increase readability include the use of italics for placeholders in computer command syntax. Computer terms or concepts are also itali- cized upon first introduction in text. Finally, you should know that all text, sample code, and screenshots in Ubuntu Unleashed were developed using Ubuntu and open-source tools. Read on to start learning about and using the latest version of Ubuntu. Experienced users will want to consider the new information in this edition when planning or considering upgrades. There are many different Linux distributions from different vendors, but many derive from, or closely mimic, the Debian distribution. This page intentionally left blankPART I Installation and Configuration IN THIS PART Installing Ubuntu CHAPTER 1 Post-Installation Configuration CHAPTER 2 Working with Gnome CHAPTER 3 Command Line Quickstart CHAPTER 4 This page intentionally left blank 1 CHAPTER IN THIS CHAPTER . Before You Begin the Installing Ubuntu Installation . Step-by-Step Installation . Reference N ot that long ago, the mere mention of installing Linux struck fear into the hearts of mortal men. Thanks to a campaign of fear, uncertainty, and doubt (commonly referred to as FUD), Linux garnered a reputation as some- thing of an elitist operating system, only configurable by those in the know. Nowadays, it is a different story entirely, and Ubuntu is one of the easiest distros to install. In this chapter, we cover how to get started with the install disc, including booting into Ubuntu Live CD to test your system. Then we cover the actual installation of Ubuntu, looking at the various options available. The whole process is fairly pain-free under Ubuntu, as you are about to learn. Before You Begin the Installation Installing a new operating system is a major event, and you should make sure that you have properly thought through what is going to take place. The first thing to consider is how the hardware will be affected by the software that you propose to install. Although Ubuntu will run well on an extremely wide variety of hardware, it is worthwhile check- ing your hardware components out because there may be a banana skin waiting for you to slip up on. The following sections provide some areas for you to investigate and think about, and may even save you hours of frustration when something goes wrong. The sections are designed to complement the ideas and checklists presented in Appendix B, "Installation Resources." You start by researching and documenting your hardware. This information will prove helpful later on during the installation. CHAPTER 1 Installing Ubuntu 12 Researching Your Hardware Specifications At the absolute minimum, you should know the basics of your system, such as how much RAM you have installed, what type of mouse, keyboard, and (importantly) monitor you have. Knowing the storage capacity of your hard drive is also important because it will help you plan how you will divide it up for Ubuntu. It is also a good idea to find out whether you are using SATA drivers or the more traditional PATA drives. A small detail such as whether your mouse uses the USB or PS/2 interface will ensure proper pointer configuration-something that should happen without fail, but you will be glad you knew in case something goes wrong! The more information you have, the better prepared you will be for any problems. Use the checklist shown in Table B.2 in Appendix B to inventory or at least record some basic features of your system. Items you need to know include the amount of installed memory, size of your hard drive, type of mouse, capabilities of the display monitor (such as maximum resolution), and number of installed network interfaces (if any). Installation Options Ubuntu is available in three forms: the Ubuntu distribution, the Ubuntu server distribu- tion, and the Ubuntu alternative distribution. For most people, the main distribution should suffice; the alternate is mainly used for upgrading existing Ubuntu users to the latest version, as well as allowing installation on low-powered systems. As for the server installation, this gives you access to a LAMP server in about 20 minutes (Linux, Apache, MySQL, and PHP), but as you will learn in this book, all these components are available to the Ubuntu default distribution. Planning Partition Strategies Partitioning is a topic that can strike fear into the hearts of novice Linux users. Coming from a Microsoft world, where you might just be used to having one hard drive, it can seem a bit strange to use an operating system that makes partitioning important. Depending on your requirements, you may opt to have a single large partition to contain all your files or you may prefer to segment your installation across several partitions to match your individual needs. You also need to take into account such things as what you will use to back up your data. With the abundance of external hard drives and Flash-based memory sticks, you could use these; remember, however, to provision backup storage space equal to or in excess of your specific requirements. Thanks to the ever-decreasing prices of storage, you can buy a 500GB SATA drive for a little more than $100. You will thank yourself that you backed up your data when your primary hard drive goes down! The needs of the business should be the primary concern when deciding to implement a Linux system. Be careful when specifying a system and ensure that you build in an adequate upgrade path that allows you to extend the life of the system and add any addi- tional storage or memory. Knowing how software is allocated on your hard drive for Linux involves knowing how Ubuntu organizes its file system, or layout of directories on storage media. This knowledge Step-by-Step Installation 13 will help you make the most out of hard drive space; and in some instances, such as plan- ning to have user directories mounted via NFS or other means, can help head off data loss, increase security, and accommodate future needs. Create a great system, and you'll be the 1 hero of information services. To plan the best partitioning scheme, research and know the answers to these questions: . How much disk space does your system require? . Do you expect your disk space needs to grow significantly in the future? . Will the system boot just Ubuntu, or do you need a dual-boot system? . How much data will require backup, and what backup system will work best? (See Chapter 13, "Backing Up" for more information on backing up your system.) DVD Installation Jump-Start To install Ubuntu from the disc included with this book, you must have at least a Pentium-class CPU, 3GB of hard drive space, and 256MB RAM. Most modern systems have significantly larger drives, and it is an idea to invest in more storage from your local computer store. The Boot Loader During installation, Ubuntu automatically installs GRUB (Grand Unified Boot Loader) to the Master Boot Record (MBR) of your hard drive. Handily enough, it also detects any other operating systems such as Windows and adds entries in GRUB as appropriate. If you have a specific requirement not to install GRUB to the MBR, you need to install using the Alternate disc, which will allow you to specify the install location for GRUB. Installing from CD or DVD Most PCs' BIOS support booting directly from a CD or DVD drive, and enable you to set a specific order of devices (such as floppy, hard drive, CD-ROM, or USB) to search for bootable software. Turn on your PC and set its BIOS if required (usually accessed by press- ing a Function or Del key after powering on); then insert your Ubuntu disc and boot to install Ubuntu. To use this installation method, your computer must support booting from your optical drive. You can verify this by checking your BIOS and then booting your PC. Older PCs might prove problematic when you desire to boot to an install using optical media. The good news is that this should no longer be a problem with most post-1995 personal computers. Step-by-Step Installation This section provides a basic step-by-step installation of Ubuntu from the install disc. The install process itself is fairly straightforward, and you should not encounter any real prob- lems. CHAPTER 1 Installing Ubuntu 14 It is useful to have your computer ready to connect to the Internet so that you can down- load updates as soon as you have finished the installation. Although typically you would be recommended to not have your computer connected up, Ubuntu's unique security configuration means that it effectively blocks all incoming network ports, so it is fairly secure until you start opening these ports. Starting the Install To get started, insert the DVD into your drive and reboot your computer. The initial screen offers a variety of languages for you to use during installation (see Figure 1.1) followed by a list of options for you to choose from (see Figure 1.2). FIGURE 1.1 Choose a language for the installation in this opening screen. However, four other options are on this screen that you need to be aware of. The second option is to Install Ubuntu, and this has the effect of running the installation program without booting into a live environment. If you select this option, you can pick up the walkthrough from Figure 1.4 later on in this section. The next option, checking the CD for defects, can be a very useful step, especially if you've been having problems with installing Ubuntu. Should it detect any errors, you should consider downloading a fresh image from the Internet and burning a new CD. Next up is a memory checker, which can also aid troubleshooting; with the relative cheapness of RAM, it's a relatively small matter to replace any faulty memory that the checker finds. Finally, you can elect to boot from the hard drive, something you might want to do if you've accidentally left the CD in after doing some work with it. For any of the preceding options, use your cursor keys to move between them and press the Enter key to select one. Now back to the live CD installation! Step-by-Step Installation 15 1 FIGURE 1.2 Ubuntu gives you five options to choose from when you're ready to proceed. Ubuntu starts the process by loading components from the DVD into memory, and after about 30 seconds or so, you are presented with the GNOME desktop that you can use to start testing things out. Bear in mind that Ubuntu loads some parts of itself from memory and other parts from the DVD, so it will not be a true representation of the real perfor- mance of Ubuntu. Rather, it's designed to give you a taste of what to expect and allows you to test it with your hardware. Thanks to the work that has gone into Ubuntu 8.04LTS, the majority of your hardware should be fine, and you can proceed to install Ubuntu. You do this by double-clicking the Install icon helpfully located on your desktop (see Figure 1.3). NOTE If you find that some things don't work, don't panic. In these cases, Google is definitely your friend and you should do some research to see whether anyone else has had sim- ilar problems, or whether they've managed to install on similar hardware. Another great place to get help is the Ubuntu Forums at http://ubuntuforums.org, where you can interact with thousands of other Ubuntu fans. After a couple of seconds, the Installation Welcome screen appears and prompts you to select a language (see Figure 1.4). As you can see, Ubuntu supports a wide range of languages, even native Welsh! Click forward when you have selected your language. The next screen asks you to specify your location in the world. This is used for setting time and region options, so find the city closest to you on the map and select it. Figure 1.5 shows that we have selected London, but it could be another city that is closer to you. Ubuntu automatically chooses the time zone and detects the offset from Greenwich mean time (GMT) for you. CHAPTER 1 Installing Ubuntu 16 FIGURE 1.3 The standard Ubuntu desktop, complete with the helpful Install icon ready for you to make the switch to Ubuntu. FIGURE 1.4 Select a language to use when installing Ubuntu. Click Forward to continue to the next screen. Following on from the Time and Region screen is the keyboard layout. Ubuntu will give a good guess at what type of keyboard is connected to your computer, but it allows you to change it in case it should differ. Make sure to find the correct layout for your keyboard (see Figure 1.6). If in doubt, use the text box at the bottom of the screen to try out all the keys. When you are happy that the keyboard layout is correct, click Forward to move on to the partitioning. Step-by-Step Installation 17 1 FIGURE 1.5 Choose the closest city to you in the world to allow Ubuntu to configure time and region settings correctly. FIGURE 1.6 Choose the most appropriate keyboard layout for your computer, and then rigor- ously test it! Partitioning under Linux used to be somewhat of a black art, but Ubuntu has made it easy. You have three main options (two of which are shown in Figure 1.7): resize the disk and use the freed-up space, erase and use the entire disc, or manually edit the partition table. Unless you have a requirement to do so, avoid the third option; it can seriously cause CHAPTER 1 Installing Ubuntu 18 trouble with other operating systems. For now, we assume that you want to resize your partition. FIGURE 1.7 Tread carefully. One false move could obliterate your disk partitions. Wait, you wanted to do that? Use the slider to choose how big you want your new partition to be. We recommend no less than 20GB, to give yourself plenty of breathing room on your hard drive. Click Forward to start the resizing process. This can take some time, so you may want to go off and read some more of this book to learn about what else you can do with Ubuntu. Alternatively, you might decide that you want to erase all the data on your disk and start from scratch. In our opinion, this is the easiest and fastest option. If you're happy to resize your hard drive, click Continue to allow Ubuntu to start the resize operation. It may take some time for Ubuntu to carry out the resize operation, so make yourself comfortable! After your partition settings have been completed, you'll be presented with a dialog box asking you for your identity, so that Ubuntu can create its first user. Here you need to input your full name, your required username and password, and the name of the computer that you are installing onto. After you've entered all the information, click Next to proceed to the migration screen where you can select to bring across information from a Windows partition or other Linux distribution. This screen (shown in Figure 1.9) is only available if you have elected to re-size your partitions. CAUTION When you set your password, be sure to remember what you entered! If you forget it, you will not be able to do much with your new system because you will not be able to log on to it. 19 Step-by-Step Installation When setting a password, make sure that it has a mixture of letters and numbers to make it more secure. For instance, a good example of a password is T1a5c0p. Although this may seem like garbage at first glance, the easy way to remember it is by 1 remembering the phrase This Is A Good Choice Of Password, shortened to Tiagcop, and finally substituting some of the letters with similar-looking numbers. Experiment with some phrases to see what you can come up with. FIGURE 1.8 Fill out all the fields on this screen to give you and your computer an identity. FIGURE 1.9 Want to move your documents and settings into Ubuntu? Just select the relevant boxes and it'll all come across. The final screen summarizes what you've chosen to do, and you should go over the settings list to make sure there are no surprises. Click the Install button to begin the CHAPTER 1 Installing Ubuntu 20 installation, and you can leave your computer alone for about ten minutes and make yourself a coffee. FIGURE 1.10 Sit back as Ubuntu takes over and installs itself to your hard drive. At this point, get ready to connect your machine to the Internet. Log in to Ubuntu at the GDM welcome page (see Figure 1.12) and you will arrive at the default Ubuntu desktop (see Figure 1.13). FIGURE 1.11 All done. Now all you have to do is reboot and watch as your system appears. TIP Ubuntu works well with other operating systems, and you should see your other operat- ing system listed on the GRUB screen. If you do not, head on over to http://www.tldp. org to get a host of tips for configuring GRUB. First Update The first thing that you need to do with your new system is update it to the latest package versions. You do this mainly to ensure that you have the latest security updates available. You can do this in a couple of ways in Ubuntu, but the easiest way to do it is to click the Updates icon in the panel to open the Update Manager. Your screen will darken, and you will be asked for a password. This password is the same as the one you used to log in to your system and is used in this case to authorize Ubuntu to make a systemwide change Step-by-Step Installation 21 1 FIGURE 1.12 Enter your username and password to log on to your new system. FIGURE 1.13 All ready for you to jump right in, the Ubuntu desktop welcomes you! (install software, on this occasion). Another way to access the Update Manager is by going to System, Administration and choosing it from the menu. Figure 1.14 shows the Update Manager in action. CHAPTER 1 Installing Ubuntu 22 FIGURE 1.14 Get the latest security and bug-fix updates for your installed software by using Update Manager. The application is easy to use because it automatically retrieves information on all the possible updates available to you. Just click Install Updates to start downloading and installing the necessary package updates. If you want more information, just click the Show Details arrow, or if you want Ubuntu to check again, click the Check button to force Ubuntu to refresh the updates. Wubi-The Easy Installer for Windows One of the new additions to the Ubuntu CD is Wubi, which allows you to install an Ubuntu system within Windows. In effect, Wubi creates a large file to hold all the Ubuntu information and provides a way, using the Windows bootloader, to boot into Ubuntu without having to do any partitioning at all. What's more, it's almost as fast as the real thing and much faster than a Live CD. To get started with Wubi you need to simply insert the Ubuntu disc into your CD drive while Windows is booted. You'll see a screen similar to Figure 1.15. Click the option to install inside Windows, to be taken to the next screen where you can choose some basic configuration options using the drop-down menus as shown in Figure 1.16. Wubi creates an image file on your hard drive and modifies the Windows bootloader to allow you to boot into Ubuntu or Windows. Don't worry, though; your hard disk hasn't Step-by-Step Installation 23 1 FIGURE 1.15 The auto-start menu gives you a gateway to Ubuntu. Click Install inside Windows to start the Wubi installation. FIGURE 1.16 You can select some configuration options before you start the installation. actually been modified, but a rather large file has been created to hold Ubuntu. When you restart your system you'll see the Ubuntu option, so press the down-arrow key and press Enter to begin booting into your new Ubuntu system. The first time you start up a Wubi Ubuntu installation, it does some post-installation configuration before loading the GNOME desktop. You now have a fully functional Ubuntu system. If you decide that you want to do a proper installation then you'll need to remove Ubuntu and Wubi. Fortunately, as part of the Wubi installation, an entry is added to the Add/Remove Programs tool in Windows allowing you to quickly and easily remove Wubi and the associated Ubuntu installation. Just remember to back up any files that you want to keep! CHAPTER 1 Installing Ubuntu 24 Shutting Down At some point, you are going to want to shut your computer down. As with most things in Linux, there are different ways to do it. You can use the Quit icon located in the upper- right corner of your screen or use the same button located in the System menu. Either way, you can choose to shut down or restart your system. You can also choose to hiber- nate (saves a copy of the running state to disk and shutdowns) or suspend (saves the current running state to memory). We would recommend using either shutdown or reboot to ensure you get a clean system when it comes back up. If you are working at the command line, you can immediately shut down your system by using the shutdown command like this: $ sudo shutdown -h now You can also use the shutdown command to restart your computer, as follows: $ sudo shutdown -r now For new users, installing Ubuntu is just the beginning of a new and highly rewarding journey on the path to learning Linux. For Ubuntu system administrators, the task ahead is to fine-tune the installation and to customize the server or user environment. Reference . http://www.ubuntu.com-The place to start when looking for news, information, and documentation about installing, configuring, and using Ubuntu. . http://tinyurl.com/c2x5u-Symantec's PartitionMagic utility includes BootMagic, which can be used to support booting of Linux or, regrettably, other less-capable operating systems, such as Windows XP. . http://www.v-com.com/product/System_Commander_Home.html-V Communications, Inc.'s System Commander, a commercial 4.2MB download that can be used to support booting of any operating system capable of running on today's PCs. An intelligent partitioning utility, Partition Commander, is included. . http://www.nwc.com/columnists/1101colron.html-How to use Intel's Pre-execution Environment (PXE) protocol to remote boot workstations. . http://www.gnu.org/software/grub/-Home page for the GRUB boot loader. . http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/ BootPrompt-HOWTO.html-The BootPrompt-HOWTO, a guide to using the boot prompt for passing kernel arguments. . http://www.tldp.org/HOWTO/Installation-HOWTO/index.html-The Linux Installation-HOWTO, a guide to installing Linux, by Eric S. Raymond. 2 CHAPTER IN THIS CHAPTER . Troubleshooting Post-Installation Post-Installation Configuration Problems . The sudo Command Configuration . First Update . Configuring Software Repositories . Installing Graphics Drivers Now that the hard bit is out of the way (installing . Changing Ubuntu's Look and Ubuntu) you can begin to customize your new operating Feel system. By default, Ubuntu presents you with a pretty blank . Preferred Behaviors canvas with which to personalize your experience. Some people choose to stick with the default look and feel, while . Input Devices others go for a full make over. . Detecting and Configuring a In this chapter, we'll take a look at getting up and running Modem with Ubuntu, including a quick tour around the desktop. . Configuring Power We will also take a look at some of the ways in which you Management in Ubuntu can customize your Ubuntu installation, such as ensuring . Setting the Date and Time that date and time settings are correct, as well as show you how to do some basic administration tasks, such as identify- . Configuring and Using CD, DVD, ing any problems with hardware. By the end of this and CD-RW Drives chapter, you should feel comfortable enough to move on . Configuring Wireless Networks through the rest of the book. . Reference NOTE Throughout this chapter, we introduce you to several key applications relevant also to other chapters of this book. We include them here because they are essen- tial to getting your system to work as you intend. You will find it worthwhile referring back to this chapter as you work your way through the book. CHAPTER 2 Post-Installation Configuration 26 Troubleshooting Post-Installation Configuration Problems A lot of work has gone into Ubuntu to make it as versatile as possible, but sometimes you may come across a piece of hardware that Ubuntu is not sure about. Knowing what to do in these situations is important, especially when you are working with Ubuntu for the first time. Because Ubuntu (and Linux in general) is built on a resilient UNIX foundation, it is much more stable than other operating systems. You might find this surprising if you are used to the Blue Screens of Death found on a certain operating system from Redmond, Washington. However, even though things might seem to be working fine, Ubuntu could have a problem that might not affect the appearance of the system. Perhaps kernel modules for devices will not load, for example, or services cannot start for some reason. In this section, you learn how to examine some of Ubuntu's built-in error logs to help you diagnose any unseen faults. Ubuntu has a command that enables you to see detailed messages that are output directly by the operating system: the dmesg command, which is commonly used with the grep command to filter output. The dmesg command takes its output directly from the /var/log/messages file, so you can choose to either run dmesg directly or enter less /var/log/messages instead. The output is fairly detailed, so be prepared for an initial shock when you see how much information is generated. You might find it easier to generate a file with the dmesg output by using the following command: $ dmesg > dmesg.txt This takes the output from the dmesg command and stores it in a new text file called dmesg.txt. You can then browse it at your leisure using your choice of text editor such as vi or emacs. You can even use the less command, like so: $ less dmesg.txt The messages are generated by the kernel, other software run by /etc/init.d, and Ubuntu's runlevel scripts. You might find what appear to be errors at first glance, but some errors are not really problems (for example, if a piece of hardware is configured but not present on your system). Thanks to Google, troubleshooting is no longer the slow process it used to be. You can simply copy and paste error messages into Google and click Find to bring up a whole selection of results similar to the problem you face. Remember, Google is your friend, especially http://www.google.com/linux, which provides a specialized search engine for Linux. You can also try http://marc.info, which browses newsgroup and mailing list archives. Either way, you are likely to come across people who have had the same problem as you. It is important to only work on a solution to one problem at a time; otherwise, you may end up getting no work done whatsoever. You should also get into the habit of making 27 The sudo command backup copies of all files that you modify, just in case you make a bad situation worse. Use the copy command like this: $ cp file file.backup You should never use a .bak extension because this could get overwritten by another auto- matic process and will leave you frustrated when you try to restore the original file. 2 If something breaks as a result of you changing the original file, you can always copy the original back into place using the command like this: $ cp file.backup file (Something as simple as this can really save your bacon, especially when you are under pressure when you've changed something you shouldn't have on a production system. That is, if you are daft enough to make sweeping changes on a production system!) The sudo command If you have come across Linux, you are probably aware of the command line. As you will find as you work through this book, Ubuntu puts a lot of reliance upon the sudo command while working at the command line. This command is used in front of other commands to tell Ubuntu that you want to run the specified command with super user powers. This sounds really special, and it actually is. When you work using the sudo command, you can make wide-ranging changes to your system that impact the way it runs. Be extra careful when running any command prefixed with sudo, however; a wrong option or incorrect command can have devastating consequences. The use of sudo is straightforward. All you have to do is enter it like this: $ sudo command commandoptions Just replace the word command with the command that you want to run, along with any options. For example, the following command opens your xorg.conf file in vi and enables you to make any changes as the super user before being able to save it: $ sudo vi /etc/X11/xorg.conf Whenever you execute a command using sudo, you are prompted for your password. This is the same password that you use to log in to Ubuntu, so it is important that you remember it. Sometimes, however, you may want to work with a classic root prompt instead of having to type sudo in front of every command (perhaps if you have to work with lots of commands at the command line that require super-user access, for example). sudo enables CHAPTER 2 Post-Installation Configuration 28 you to do this by using the sudo -i command. Again, you are prompted for your pass- word, which you should enter, after which Ubuntu gives you the standard root prompt, as follows: # From here, you can execute any command without having to keep entering sudo. First Update As discussed in Chapter 1, "Installing Ubuntu," you should update your software as soon as you log in to Ubuntu for the first time to benefit from any available security and bug fixes. In that example, we used the Update Manager, which is really a GUI wrapper for the command apt-get. In the background, Ubuntu automatically polls the software reposito- ries configured as standard to determine whether any updates are available. When it detects that new versions of installed software are available, a pop-up message appears in the upper-right corner of your screen (see Figure 2.1). By clicking the Updates icon in the panel, you automatically open Update Manager, but not before you are prompted for your password (because you are about to make a systemwide change). FIGURE 2.1 A quick and easy way to get updates installed is to look for the update notifica- tion. Another way of updating your system, and one that can be quicker than Update Manager, is to use the command line. If you go to the Applications, Accessories menu and select the Terminal option, a blank screen displays. This is the command line (commonly referred to as the terminal) and is one of the most powerful features of Linux. It is covered in more detail in Chapter 30, "Command Line Masterclass," so we won't delve too deeply here. You are greeted with a prompt similar to the one here: andrew~$ A blinking cursor also displays. Ubuntu is awaiting your first command. Here we want to issue the following command: $ sudo apt-get update First Update 29 This command tells the package management utility apt-get to check in with the config- ured repositories and check for any updates for installed software. In a matter of seconds, Ubuntu completes all of this and your screen should look something like this: $ sudo apt-get update Password: Get: 1 http://security.ubuntu.com hardy-security Release.gpg [189B] 2 Get: 2 http://security.ubuntu.com hardy-security Release [30.9kB] Get: 3 http://gb.archive.ubuntu.com hardy Release.gpg [189B] Get: 4 http://gb.archive.ubuntu.com hardy-updates Release.gpg [189B] Get: 5 http://gb.archive.ubuntu.com hardy-backports Release.gpg [189B] Hit http://gb.archive.ubuntu.com hardy Release Get: 6 http://gb.archive.ubuntu.com hardy-updates Release [30.9kB] Get: 7 http://security.ubuntu.com hardy-security/main Packages [25.1kB] Get: 8 http://gb.archive.ubuntu.com hardy-backports Release [19.6kB] Hit http://gb.archive.ubuntu.com hardy/main Packages Get: 9 http://gb.archive.ubuntu.com hardy/restricted Packages [4571B] Hit http://gb.archive.ubuntu.com hardy/universe Packages Get: 10 http://gb.archive.ubuntu.com hardy/multiverse Packages [95.2kB] Get: 11 http://security.ubuntu.com hardy-security/restricted Packages [4253B] Get: 12 http://security.ubuntu.com hardy-security/universe Packages [5271B] Get: 13 http://security.ubuntu.com hardy-security/multiverse Packages [1677B] Get: 14 http://security.ubuntu.com hardy-security/main Sources [6227B] Get: 15 http://security.ubuntu.com hardy-security/restricted Sources [974B] Get: 16 http://security.ubuntu.com hardy-security/universe Sources [639B] Get: 17 http://security.ubuntu.com hardy-security/multiverse Sources [533B] Hit http://gb.archive.ubuntu.com hardy/main Sources Get: 18 http://gb.archive.ubuntu.com hardy/restricted Sources [1478B] Hit http://gb.archive.ubuntu.com hardy/universe Sources Hit http://gb.archive.ubuntu.com hardy/multiverse Sources Get: 19 http://gb.archive.ubuntu.com hardy-updates/main Packages [37.7kB] Get: 20 http://gb.archive.ubuntu.com hardy-updates/restricted Packages [14B] Get: 21 http://gb.archive.ubuntu.com hardy-updates/universe Packages [8363B] Get: 22 http://gb.archive.ubuntu.com hardy-updates/multiverse Packages [866B] Get: 23 http://gb.archive.ubuntu.com hardy-updates/main Sources [22.1kB] Get: 24 http://gb.archive.ubuntu.com hardy-updates/restricted Sources [14B] Get: 25 http://gb.archive.ubuntu.com hardy-updates/universe Sources [1823B] Get: 26 http://gb.archive.ubuntu.com hardy-updates/multiverse Sources [427B] Get: 27 http://gb.archive.ubuntu.com hardy-backports/main Packages [14B] Get: 28 http://gb.archive.ubuntu.com hardy-backports/restricted Packages [14B] Get: 29 http://gb.archive.ubuntu.com hardy-backports/universe Packages [14B] Get: 30 http://gb.archive.ubuntu.com hardy-backports/multiverse Packages [14B] Get: 31 http://gb.archive.ubuntu.com hardy-backports/main Sources [14B] CHAPTER 2 Post-Installation Configuration 30 Get: 32 http://gb.archive.ubuntu.com hardy-backports/restricted Sources [14B] Get: 33 http://gb.archive.ubuntu.com hardy-backports/universe Sources [14B] Get: 34 http://gb.archive.ubuntu.com hardy-backports/multiverse Sources [14B] Fetched 299kB in 2s (140kB/s) Reading package lists... Done Now you need to issue the command to upgrade your software by entering the following: $ apt-get dist-upgrade Because you have already checked for updates, Ubuntu automatically knows to download and install only the packages it needs. The dist-upgrade option intelligently works with newer packages to ensure that any dependencies that are needed can be satisfied. You can also use the option upgrade instead, but it isn't as smart as dist-upgrade. apt-get Alternatives Ubuntu has an alternative to apt-get called aptitude. It works in pretty much the same way as apt-get with the exception that aptitude also includes any recommend- ed packages on top of the requested packages when installing or upgrading. You can use aptitude exactly as you would use apt-get, so for instance you could issue the command aptitude update and it would update the repository information. However, you can also issue just the command aptitude without any options, which brings up a text-based package manager that you can use to select packages. Configuring Software Repositories Ubuntu uses software repositories to get information about available software that can be installed onto your system. By default, it only allows access to a small portion of software (even though this software is officially supported by Ubuntu). However, Ubuntu is based on a much older Linux distribution called Debian. Debian has access to more than 17,000 different packages, which means that Ubuntu can have access to these packages, too. To gain access to these additional packages, you need to make some changes to your repository configuration files by using the Software Sources GUI tool, found under the System, Administration menu and as shown in Figure 2.2. On the first tab (Ubuntu Software), you have five options to choose from, depending on your requirements. It is entirely up to you which options you check, but make sure that as a minimum the first check box is checked to allow you to select "official" software with Canonical support for Ubuntu. The more boxes you check, the wider your selection of software. It's also a good idea to make sure that the Proprietary Drivers box is checked in order to benefit from drivers that could enhance your system's performance. Configuring Software Repositories 31 2 FIGURE 2.2 Enable both Universe and Multiverse repositories to allow access to a huge variety of software for Ubuntu. Open Source Versus Proprietary You will hear a lot of arguments about using Proprietary drivers within Ubuntu. Some people feel that it goes against what Open Source stands for, in that the underlying code that is used for the drivers cannot be viewed and modified by the wider commu- nity (as opposed to the actual driver developers). However, there is also a strong argu- ment that says users should have to undergo the least amount of work for a fully functional system. This is certainly the case for graphics cards, although at the time of writing AMD has announced the open sourcing of the ATI graphics driver. Ubuntu takes a middle of the road stance on this and leaves it up to the user to either enable or disable the repository that gives access to proprietary drivers. Why not give the open source drivers a chance before plumping for a proprietary one? Once you are happy with your selections, switch to the Updates tab to configure Ubuntu's behavior when updates are available (see Figure 2.3). By default both the important secu- rity updates and recommended updates are checked to ensure that you have the latest bug fixes and patches. You can also choose to receive proposed updates and back-ports (soft- ware that is released for a newer version of Ubuntu but re-programmed to be compatible with 8.04), but we'd only recommend this if you are happy to carry out testing for the community as any updated software from these repositories can have an adverse effect on your system. CHAPTER 2 Post-Installation Configuration 32 FIGURE 2.3 Configure which updates you want, and you want them to be handled in the Updates tab of Software Sources. Ubuntu also allows you to configure how often it checks for updates, as well as how they are installed. By default Ubuntu checks daily for updates and, if there are any available, will notify you. However, you can change the frequency (something which is recom- mended if you want to have a structured update policy) and the actions Ubuntu carries out when it finds available updates. We recommend keeping the notification only option as this allows you to see what updates are available prior to them being installed. If you want to save time then choose Download All Updates in the Background to allow Ubuntu to silently download the updates prior to you choosing to install them. CAUTION We don't recommend selecting the option which automatically installs security updates. It's important that you have the option of choosing to install updates as there is always the chance that an update may cause problems. The last thing you want is for your sys- tem to suddenly stop working because an update was installed that has broken some- thing without your knowledge. Part of the magic of Ubuntu is the ease in which you can upgrade from major version to major version, such as moving from 7.10 to 8.04 LTS for instance. However, because 8.04 is a Long Term Supported release, you may decide that you don't want to have the option to move to the Intrepid Ibex (what should be version 8.10) as you want to remain on 8.04 Installing Graphics Drivers 33 LTS. By ensuring that the release upgrade option is set to Long Term Supported releases only, you'll only be prompted to upgrade your version of Ubuntu to what will be the next Long Term Supported version, which, based on history, would be 10.04! After configuring your update options, click the Close button. Ubuntu prompts you with a message that the software information is out of date and needs to be refreshed; click Reload to retrieve the very latest update information. After a few seconds you are returned to your desktop and can carry on working. 2 Installing Graphics Drivers Ubuntu is extremely good at detecting and configuring graphics cards. By default it ships with a number of proprietary drivers to allow graphics cards to work and will alert you to this by using the Hardware Drivers Manager. You can then choose to enable or disable the drivers as appropriate, depending on your personal preference. (See the "Open-Source Versus Proprietary" note earlier in this chapter.) You can find the Hardware Drivers Manager under the System, Administration menu, and it is shown in Figure 2.4. FIGURE 2.4 Toggle the usage of restricted drivers with a simple point-and-click interface. Here you can see that an Intel network driver has been enabled for use. If you elect to use a listed proprietary driver, Ubuntu will first confirm that you are happy to proceed and then automatically download and install the driver. This may require you to log out and back in again in order for the driver to take effect. CHAPTER 2 Post-Installation Configuration 34 For the most part, Ubuntu will detect and configure the majority of graphics cards from the start, and even if it has problems, it will attempt to give you a display of some sort. This feature is known as BulletProof X, and it allows you access to tools that may help you fix your problem by trying different combinations of graphics cards and monitors. Changing Ubuntu's Look and Feel GNOME, the default window manager for Ubuntu, has a number of options to change how it looks and feels. The default theme is Human; this takes a blend of the GNOME Clearlooks theme, mixes it with icons from the Tango Project, and adds a little spice direct from Ubuntu. However, it is not to everyone's taste, so in this section we look at changing the visual style of Ubuntu. Changing the Desktop Background Perhaps the easiest and most dramatic change you can make is to change the default desktop background. It is as simple as right-clicking on the desktop and selecting the option to Change Desktop Background to see the dialog box shown in Figure 2.5. Ubuntu comes with a small selection of wallpapers to start with, but we recommend going to the Web to find a great selection. Our favorite site is http://www.gnome-look.org, where you can find a great selection of desktop wallpapers. FIGURE 2.5 Choose one of the default wallpapers, or use the Add Wallpaper option to select your own image file. Changing Ubuntu's Look and Feel 35 As you click on a wallpaper, Ubuntu automatically applies it so that you can quickly see whether you like it. When you are happy with your selection, keep the dialog box open so we can change other aspects of the desktop. Changing Colors 2 Next up is the colors that Ubuntu defaults to. When Ubuntu was originally launched in October 2004, it came with a predominantly brown theme, leading to some users ques- tioning the style choices of the Ubuntu development team. Over time the brown has been replaced with a warm caramel color (which, to be honest, is only slightly better than the brown). Thankfully, GNOME offers an array of tools to modify the defaults. Just head to the System, Preferences, Appearance option to quickly change the entire theme (see Figure 2.6). Or if you've kept the dialog box open as suggested earlier, click the Theme tab. You will see a list of predefined themes that you can choose from. FIGURE 2.6 Either use the default themes or mix and match elements of them to match your specifications. Alternatively, you can click the Customize button to mix up your own look and feel, as shown in Figure 2.7. You can choose to change the window decorations (title bar, mini- mize, maximize buttons, and so on), the general color scheme and the icon theme. As you CHAPTER 2 Post-Installation Configuration 36 select an option, Ubuntu automatically applies it to the desktop so you can get an idea of how it will look. When you're happy with your selections click Close to return to the main Theme dialog box and move on to the next section. FIGURE 2.7 Use any number of combinations of icons, colors, and window decorations to give you a truly personalized look and feel. Modifying System Fonts GNOME also enables you to change the fonts used throughout Ubuntu. If you have diffi- culty reading one font, just exchange it for another. In the Appearance dialog box you will see a tab called Fonts. Click on this tab to see the options available for changing system fonts, which are shown in Figure 2.8. Simply click on each font name to customize the font used for that function. For instance, you may prefer your Window Title Font to be italicized, so click the font name and select the Italic option. Clicking OK immediately applies the change, again giving you a good idea of whether it works. Sometimes a font can look good within the Font Preferences screen, but when it comes to using it you wonder why on earth you chose it. Choose your fonts wisely! Changing How Menus Look You can also change the look of menus, including the location of text descriptions for each icon, by selecting the Interface tab. To be honest, there's not much to look at here, and you would only change any of these options if you had a burning desire to replace your icons with text. Preferred Behaviors 37 2 FIGURE 2.8 Keep your fonts relatively simple for ease of use, or if you prefer, indulge your love of calligraphic fonts! Visual Effects Perhaps the most exciting part of Ubuntu 8.04 LTS is that by default it comes with some pretty snazzy visual effects to enhance the look and feel of your desktop. Click the Visual Effects tab to see the options available for configuring the level of effects, shown in Figure 2.9. In keeping with Ubuntu's philosophy of keeping things simple, there are three options to choose, from which you can elect to turn off all visual effects, use a basic set of effects, or use a lot of visual effects. If you choose this last option you will need to have a relatively fast computer (that is, purchased after 2004) with plenty of memory (at least 1GB) to ensure that the computer doesn't grind to a halt while rendering effects. Preferred Behaviors Ubuntu can detect and adapt to certain events that happen when you plug something into your computer or if you click on a link. Sometimes you may want Ubuntu to open one application rather than another, or sometimes to not do anything at all. This is called Ubuntu's behavior, and you can modify it to work as you want it to. You can find the two main tools you need to do this under the System, Preferences menu, and you need use either Preferred Applications or Removable Drives and Media. Preferred Applications Preferred applications are the applications that Ubuntu calls upon when it wants to open an Internet site, an email, or a terminal (see Figure 2.10). Ubuntu makes it easy for you by automatically detecting the available options for you. Alternatively, if you want to specify CHAPTER 2 Post-Installation Configuration 38 FIGURE 2.9 Wow your friends and colleagues by activating visual effects to enhance your user experience. Alternatively, switch them all off if you get a bit overwhelmed by windows flying everywhere! your own particular application that may not appear in the list by default, select the Custom option within the application type and enter the command used to launch the application into the field along with any options, arguments, or switches that you want to use. FIGURE 2.10 Setting preferred Internet applications. Input Devices 39 Removable Drives and Media In an increasingly connected world, you will find yourself plugging all sorts of devices and widgets into your computer. For the most part, it is usually multimedia files that you want to launch in a specific way. Ubuntu provides a great tool to configure the consequences of everything from plugging a digital camera into your computer, inserting a film DVD, and even plugging in a graphics tablet. 2 This handy tool goes by the catchy name of Removable Drives and Media, or to call it by its proper (package) name, gnome-volume-properties. With this tool, you can select the default command to run when Ubuntu detects the presence of a new drive or piece of hardware. Unlike the Preferred Applications tool, this tool does not detect the options for you, instead relying on you knowing the command needed to execute the correct applica- tion. For example, in Figure 2.11, you can see the options for handling digital images in Ubuntu. When I connect my digital camera after a hard day's snapping, GNOME will detect its pres- ence and launch F-Spot, ready for it to import my pictures directly into its library. FIGURE 2.11 Take the hard work out of importing digital images by configuring gnome-volume- properties to work the way you want. Other options include GNOME's behavior when removable drives (USB pen drives and the like) are connected, what to do in the event of a PDA or scanner being connected, and even more obscurely, what to do when a USB mouse is plugged in. Input Devices The primary interface between you and your computer is your keyboard and mouse. Both of these are essential to the correct usage of your computer, so it is important that they are configured correctly. Windows users will be familiar with the basic options available, so it CHAPTER 2 Post-Installation Configuration 40 could come as somewhat of a shock to learn that you can do a few more nifty things with a keyboard and mouse in Ubuntu. Keyboard Shortcuts If you have used a computer for more than a few years, you probably long for keyboard shortcuts for popular commands. Ubuntu allows you to set your own keyboard shortcuts for a wide variety of system commands. The easy-to-use Keyboard Shortcuts option under System, Preferences lists a lot of different actions that you can program shortcuts for (see Figure 2.12). FIGURE 2.12 Make your life easier and your work go more quickly by configuring useful keyboard shortcuts. If you have one of those multimedia keyboards with lots of extra keys, this is the place to configure their use. Just click on the shortcut next to the action you want to configure and press the key that you want to map to this action. Repeat this until you have exhausted all the combinations that you want to configure. Then click Close to finish. Keyboard Layout Getting the layout of your keyboard right can make a huge difference in how you work. When you installed Ubuntu (see Chapter 1), you would have specified the default keyboard layout to use. However, there may be times when you need to switch layouts, which you can do using the Keyboard tool in the System, Preferences menu (see Figure 2.13). Certainly, I've had to configure this for my wife. You see, in the United Kingdom our @ key is located to the right of the colon/semicolon key, whereas in the United States it is located on the number 2 key. My wife spent quite a few years in the States and got used to the U.S. keyboard layout. So instead of her having to learn a new layout, I just configured Input Devices 41 2 FIGURE 2.13 Use the Keyboard Layout tool to ensure that you have your keyboard settings configured correctly. her login to use the U.S. layout and mine to use the U.K. layout, which has saved us from a number of arguments! However, you can also use the Keyboard Layout tool to configure special key behaviors. For instance, some people prefer to swap the Caps-Lock and left Ctrl key around. You can set this option and others in the Layout Options tab. If you are not yet an l33t hacker, experiment with what's on offer; you may get some benefit from these customizations. Finally, Ubuntu can also configure and enforce typing breaks, all in the name of good health. Simply set the length of working time, the duration of the break, and whether you want to be able to postpone. When this is activated at the end of the first length of working time, Ubuntu locks the computer and will not let you log back in until the break duration has passed. Of course, if you are in the middle of something important, setting the Postpone option may prove useful. Mouse There's not really much to configuring a mouse. Ubuntu does a great job of detecting most mice, except that it's not so good at configuring extra buttons over and above the left and right button and scroll wheel. The most useful option here is the Locate Pointer option, which highlights the mouse pointer when you press the Ctrl key. Of course, if you are left-handed, you can also swap the mouse buttons over, but this is a matter of personal preference. CHAPTER 2 Post-Installation Configuration 42 Detecting and Configuring a Modem More than 38 million users in the United States and another 85 million users around the world now connect to the Internet with cable or digital subscriber line (DSL) service, but for many users a modem is the standard way to connect with an Internet service provider (ISP) using the Point-to-Point Protocol (PPP). Other common tasks for modems include sending and receiving faxes. If you add or change your modem after the initial installation, you must configure Ubuntu to use the new modem to perform all these tasks. Ubuntu includes several tools you can use to configure and use an internal or external modem in your notebook or PC. Chapter 14, "Networking," contains the details about configuring Ubuntu to connect to the Internet using a modem. This section covers how to configure and use modems using serial ports (using a standard formerly known as RS232, but now called EIA232) or USB. Configuring a Serial-Port Modem Linux uses /dev/ttySX, /dev/ttyUSBX, or /dev/usb/ttyUSBX for serial ports, where X can range from 0 to 15. You can add many additional ports to a system using multiport cards or chained USB devices. A PC's integral serial ports are generally recognized at boot time. To see a list of recognized ports for your system, pipe the dmesg command output through the fgrep command, as follows: $ sudo dmesg | grep tty ttyS00 at 0x03f8 (irq = 4) is a 16550A ttyS01 at 0x02f8 (irq = 3) is a 16550A In this example, the grep command reports that two serial ports have been recognized in the dmesg output. Note that the device matching ttyS00 is /dev/ttyS0, despite the kernel output. The PC's external modem can be attached (most likely using a male DB9 adapter) to either port. Under Linux, nearly all modem-dependent software clients look for a symbolic link named /dev/modem that points to the desired device. This link is not created by default; as root, however, you can create this device manually using the ln command like this: $ sudo ln -s /dev/ttyS0 /dev/modem In this example, /dev/modem will point to the first serial port. Ubuntu's network-admin (shown in Figure 2.14 and found under System, Administration, Networking) will always detect the presence of a modem on the system. However, it does not activate the interface unless specifically told to do so. You can use the Auto-Detect button to find the correct modem port. Configuring WinModems for Laptops Other issues regarding modems focus on Linux notebook users with laptops using controllerless modems. These modems use proprietary software to emulate a hardware modem and are commonly referred to as WinModems due to the software being available Configuring Power Management in Ubuntu 43 2 FIGURE 2.14 Ubuntu's network-admin will help you set up an appropriate modem. only on Windows. Despite the release of binary-only drivers to enable use of some of these modems, these devices remain the bane of Linux notebook and some desktop users. You might find some support for Lucent (but not Lucent AMR), Motorola SM56-type, the IBM Mwave, and Conexant HSF (not HCF) controllers. At the time of this writing, there was no support for any 3Com or U.S. Robotics controllerless modems. For links to drivers and more information, browse to the Linux WinModem web page at http://www. linmodems.org. Configuring Power Management in Ubuntu Advanced Configuration and Power Interface (ACPI) enables workstations and servers to auto- matically turn off when instructed to shut down. Most often used by Linux mobile users, ACPI can help extend battery sessions through the use of intelligent storage-cell circuitry, CPU throttling (similar to, but not the same as safety thermal throttling incorporated by Intel in Pentium III and IV CPUs), and control of displays and hard drives. Most PCs support ACPI via the BIOS and hardware. ACPI support is configured, enabled, and incorporated in the Linux kernel. ACPI information is constantly available through the acpi command, which looks like this: $ acpi -V Battery 1: charged, 100% Thermal 1: ok, 47.0 degrees C AC Adapter 1: on-line This example provides information such as battery charge status, percentage of charge, as well as current system temperature and status of the AC adapter. CHAPTER 2 Post-Installation Configuration 44 Alternatively, you can use the GUI tool that Ubuntu provides, which can be found under the System, Preferences menu as the Power Management option (shown in Figure 2.15). FIGURE 2.15 Gnome Power Management allows you to monitor battery status and configure specific power-related actions, such as closing the lid of your laptop or pressing the power button. Fortunately, Ubuntu provides good support for suspend and hibernate. Suspend means that your computer writes its current state to memory and goes into a low power mode, while Hibernate writes the current state of the system to disk and powers off the computer. Either way, your computer will start much faster the next time you go to use it. Setting the Date and Time The Ubuntu installer queries during installation for default time zone settings, and whether your computer's hardware clock is set to Greenwich mean time (GMT)-more prop- erly known as UTC or coordinated universal time. Linux provides a system date and time; your computer hardware provides a hardware clock-based time. In many cases, it is possible for the two times to drift apart. Linux system time is based on the number of seconds elapsed since January 1, 1970. Your computer's hardware time depends on the type of clock chips installed on your PC's motherboard, and many motherboard chipsets are notoriously subject to drift. Keeping accurate time is not only important on a single workstation, but also critically important in a network environment. Backups, scheduled downtimes, and other network- wide actions need to be accurately coordinated. Ubuntu provides several date and time utilities you can use at the command line or during an X session, including these: . date-Used to display, set, or adjust the system date and time from the command line Setting the Date and Time 45 . hwclock-A root command to display, set, adjust, and synchronize hardware and system clocks . time-admin-Ubuntu's graphical date, time, and network time configuration tool Using the date Command 2 Use the date command to display or set your Linux system time. This command requires you to use a specific sequence of numbers to represent the desired date and time. To see your Linux system's idea of the current date and time, use the date command like this: $ date Tue Mar 18 20:01:43 GMT 2008 To adjust your system's time (say, to March 1927, 2008 at 8 a.m.), use a command line with the month, day, hour, minute, and year, like so: $ sudo date 031908002008Wed Mar 19 08:00:00 GMT 2008 Using the hwclock Command Use the hwclock command to display or set your Linux system time, display or set your PC's hardware clock, or to synchronize the system and hardware times. To see your hard- ware date and time, use hwclock with its --show option like so: $ hwclock --show Tue 18 Mar 2008 20:04:27 GMT -0.034401 seconds Use hwclock with its --set and --date options to manually set the hardware clock like so: $ sudo hwclock --set --date "03/19/08 08:00:00" $ hwclock --show Wed 19 Mar 2008 08:00:08 AM GMT -0.151718 seconds In these examples, the hardware clock has been set using hwclock, which is then used again to verify the new hardware date and time. You can also hwclock to set the Linux system date and time date using your hardware clock's values with the Linux system date and time. For example, to set the system time from your PC's hardware clock, use the -hctosys option like so: $ sudo hwclock --hctosys To set your hardware clock using the system time, use the -systohc option like so: $ sudo hwclock --systohc CHAPTER 2 Post-Installation Configuration 46 Changing the Time and Date Ubuntu's graphical X tool named time-admin can be used to set your system date and time. The client is found in System, Administration, Time & Date. To make any changes to this tool you need to unlock it by clicking the Unlock button. You'll be asked to enter a password that corresponds with a user who has administrator privileges. Once you've done this, you are able to change any of the options. Set the date and time by using the Calendar and Time fields. You can also have your work- station obtain updated date and time information via the Internet by choosing Remote Time Servers under the Select Servers button. To do this, you need to have ntpd time daemon support installed. If it is not present, Ubuntu asks whether you want to retrieve it, and then installs it so that you can proceed. After it has been installed, restart the time- admin client and you will now be able to select specific Internet time servers for you to synchronize with. FIGURE 2.16 Use Ubuntu's time-admin client to set your system date and time. Configuring and Using CD, DVD, and CD-RW Drives Linux provides support for using a variety of CD and DVD devices and media. This section shows how to determine what device has been assigned to your CD drive and how to get additional drive information if the drive supports recording on optical media. AT Attachment Packet Interface, or ATAPI, IDE-based CD drives are recognized during installation and work through the ide-cd kernel module. A symbolic link named /dev/cdrom is created and the device is mounted under /media/cdrom, both of which point to your CD's device (perhaps /dev/hdb or /dev/hdc). You can use many different types of CD drives with Linux, and you can easily replace, add, or upgrade your system to use a new drive. Part of a successful configuration involves the proper installation of the hard- ware and being able to determine the drive's device when using Linux. Configuring and Using CD, DVD, and CD-RW Drives 47 Checking Drive Assignment Linux recognizes CD and DVD drives upon booting if they are attached to your computer's motherboard with proper cabling and if they are assigned as either a master or slave on an IDE channel. Look through your kernel boot message for the drive device assignment, such as the following: 2 sr: DVDROM 10X, ATAPI CD/DVD-ROM drive If you have a DVD-capable drive, you generally should also have a symbolic link named /dev/dvd and an entry under /media that point to your drive's device because many DVD clients, such as xine or vlc, look for /dev/dvd by default. The first CD-RW drive is assigned to the device /dev/scd0 (although it might still be initially recognized while booting as an IDE device), with subsequent drives assigned to /dev/scd1, and so on. To initialize your drive for use, the following modules should be loaded: Module Size Used by Not tainted sg 30244 0 (autoclean) sr_mod 15192 0 (autoclean) cdrom 27872 0 (autoclean) [sr_mod] ide-scsi 8128 0 scsi_mod 96572 2 [sr_mod ide-scsi] Look for kernel message output regarding the device such as this: Attached scsi CD-ROM sr0 at scsi0, channel 0, id 0, lun 0 sr0: scsi3-mmc drive: 0x/32x writer cd/rw xa/form2 cdda tray Uniform CD-ROM driver Revision: 3.12 Your ATAPI-based CD-RW drive will then work as a SCSI device under emulation, and the symbolic link /dev/cdrom should point to /dev/scd0. You can also use the cdrecord command (included with Ubuntu's multimedia software packages) to acquire SCSI device information about your drive for later use during the burning operation, as follows: # cdrecord -scanbus scsibus1: 1,0,0 0) 'HL-DT-ST' 'RW/DVD GCC-4120B' '2.01' Removable CD-ROM 1,1,0 1) * 1,2,0 2) * 1,3,0 3) * 1,4,0 4) * 1,5,0 5) * 1,6,0 6) * 1,7,0 7) * CHAPTER 2 Post-Installation Configuration 48 The pertinent information-1,0,0 in the example (SCSI bus, device ID, and logical unit number, or LUN)-can then be used during a burn operation like this: # cdrecord -v speed=8 dev=1,0,0 -data -eject file_name.img In this example, a CD-ROM data image named file_name.img is created on a CD-R or CD-RW media at a speed of 8, and the new disk will be ejected after the write operation has completed. NOTE Ubuntu also includes the dvdrecord, dvd+rw-format, and growisofs commands, which can be used with DVD-R and DVD-RW drives. Configuring Wireless Networks Wireless networking used to be a pig to configure for Linux, requiring a lot of complicated steps to connect to a wireless network. However, Ubuntu includes a great utility called Network Manager that makes connecting to and managing wireless networks extremely easy. Thanks to the inclusion of several wireless chipset drivers in the Ubuntu Linux kernel, it is now easy to connect to WEP and WPA encrypted wireless networks. When you log in to Ubuntu, you should see the Network Manager applet appear in the top panel (see Figure 2.17). This is the applet that handles and monitors network connections. FIGURE 2.17 The Network Manager notification applet, seen here already connected to a wireless network. Click the applet icon in the toolbar to connect to a wireless network. If your wireless access point broadcasts its SSID, it should appear in the list under wireless networks (similar to Figure 2.17). Simply click on the required network and Network Manager will detect what encryption (if any) is in use and ask you for the passkey. Enter this and Network Manager will start the wireless connection. The passkey is then stored in the default keyring, a secure area that is unique to your login. From now on, whenever you log in to Ubuntu, the Network Manager connection will start automatically. If for some reason your wireless network does not appear (you might have your SSID hidden), you must use the Connect to Other Wireless Network option, which brings up the screen shown in Figure 2.18. Reference 49 2 FIGURE 2.18 Configure your wireless network connection settings using Network Manager. Network Manager can handle WEP and WPA Personal encryption. You are advised to use WPA encryption because it is the stronger of the two. Network Manager can also connect to Cisco VPN connections, using the vpnc software. Install this using synaptic and you will be able to specify connection settings as appropri- ate, or if you have access to a predefined configuration (.pcf file) you can import it directly into Network Manager. Related Ubuntu and Linux Commands You will use these commands when performing post-installation configuration tasks: . acpi-Views or uses power management settings and commands . cdrecord-Gets SCSI device information and burns CD-ROMs . dmesg-Views information reported by the Linux kernel Reference . The Linux Keyboard and Console HOWTO-Andries Brouwer's tome on keyboard and console issues; includes many troubleshooting tips. . http://www.x.org/-The X.Org Foundation, home of X11R7. . http://www.alsa-project.org-Home page for the Advanced Linux Sound Architecture project, an alternative set of sound drivers for Linux. . http://www.opensound.com-Commercial sound drivers for Linux. . /usr/src/linux-2.6/Documentation/power/pci.txt-Patrick Mochel's document regard- ing PCI power-management routes for Linux kernel and PCI hardware support programmers. CHAPTER 2 Post-Installation Configuration 50 . http://tldp.org/HOWTO/Modem-HOWTO.html-One of the newest HOWTOs on using modems with Linux. . http://tldp.org/HOWTO/Serial-HOWTO.html-David S. Lawyer's Serial HOWTO, with additional information about Linux and serial port use. . http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html-A descrip- tion and tutorial on the EIA232 (formerly RS232) standard. . http://www.qbik.ch/usb/devices/-The place to check for compatibility of USB devices for Linux. . http://www.linmodems.org-This site provides links to several drivers for controller- less modem use under Linux. . http://www.linux1394.org/-Home page for the Linux IEEE 1394 project with new information, links to updated drivers, and lists of compatible chipsets and devices. . http://groups.google.com/-Search Usenet groups through Google; another alterna- tive to http://marc.theaimsgroup.com/. . http://www.linuxquestions.org/-The Linux Questions site, a useful set of commu- nity forums that can help you find answers to your more frustrating problems. . http://cdrecord.berlios.de-Home page for the cdrecord command and related utili- ties. 3 CHAPTER IN THIS CHAPTER . The Gnome Desktop Working with Gnome Environment . Eye Candy for the Masses . Basic X Concepts . Using X . Starting X Imagine a world of black screens with white text, or for . KDE-The Other Environment those of you who remember, green screens with green text. . XFce That used to be the primary interface for users to access . Reference computers with. Thankfully computing has moved on significantly and has adopted the graphical user interface or GUI as standard on most desktop and workstation platforms. Ubuntu is no different and its primary window manager is called Gnome (the Gnu Network Object Model Environment). Based upon the ethos of simplicity by design, Gnome offers a rich and full interface that you can easily use to be productive. The principle design objectives include an intuitive system, meaning that it should be easy to pick up and use as well as good localization/internation- alization support and accessibility. Gnome is founded upon the X Window System, the graphi- cal networking interface found on many Linux distributions which provides the basis for a wide range of graphical tools and window managers. More commonly known as just X, it can also be referred to as X11R7 and X11 (such as that found on Mac OS X). Coming from the world-renowned Massachusetts Institute of Technology, X has gone through several versions, each of which has extended and enhanced the technology. The open source implementation is managed by the X.Org foundation, the board of which is made up of several key figures from the open source world. The best way to think about how X works is to see it as a client/server system. The X server provides services to programs that have been developed to make the most of the graphical and networking capabilities that are available under the server and in the supported libraries. X.Org provides versions for many different platforms, including CHAPTER 3 Working with Gnome 52 Linux and Mac OS X. Originally implemented as XFree86, X.Org was forked when a row broke out over certain restrictions that were going to be included in the XFree86 license. Taking a snapshot of code that was licensed under the previous version of the license, X.Org drove forward with its own implementation based on the code. Almost in unison, most Linux distributions turned their back on XFree86 and switched their development and efforts to X.Org. In this chapter you will learn how to work with Gnome and also the version of X that is included with Ubuntu. We will look at the fundamentals of X, as well as how to get X to work with any upgrades that might affect it, such as a new graphics card or that new flat panel display you just bought. We will also take a look at some of the other Window Managers that are included with Ubuntu, including KDE and Xfce. The Ubuntu Family When people talk about Ubuntu, they generally mean the original distribution launched in 2004 which uses the Gnome window manager. However, there are a number of deriv- atives of Ubuntu which use other window managers and they are freely available for you to download and use. For instance, Kubuntu uses the KDE window manager while Xubuntu uses Xfce instead. Despite their very visual differences, all three rely on the same core system, and it is also easy for you to add that window manager to your existing system by using one of the *-desktop meta-packages. These packages are designed to install all the base applications that are linked to that version of Ubuntu, so installing the kubuntu-desktop package would automatically install all the software needed for Kubuntu, while also retaining your existing desktop environment. The Gnome Desktop Environment A desktop environment for X provides one or more window managers and a suite of clients that conform to a standard graphical interface based on a common set of software libraries. When they are used to develop associated clients, these libraries provide graphi- cal consistency for the client windows, menus, buttons, and other onscreen components, along with some common keyboard controls and client dialogs. The following sections discuss the primary desktop environment that is included with Ubuntu: Gnome. Gnome: The GNU Network Object Model Environment The Gnome project, which was started in 1997, is the brainchild of programmer whiz Miguel de Icaza. Gnome provides a complete set of software libraries and clients. Gnome depends on a window manager that is Gnome-aware. This means that to provide a graphi- cal desktop with Gnome elements, the window manager must be written to recognize and use Gnome. Some compliant window managers that are Gnome-aware include Compiz (the default Gnome window manager in Ubuntu), Enlightenment, Metacity, Window Maker, IceWM, and beryl. Ubuntu uses Gnome's user-friendly suite of clients to provide a consistent and user- friendly desktop. Gnome clients are found under the /usr/bin directory, and Gnome The Gnome Desktop Environment 53 configuration files are stored under the /etc/gnome and /usr/share/gnome directories, with user settings stored in the home directory under .gnome and .gnome2. A representative GNOME desktop, running the removable media preferences tool used for setting actions to events, is shown in Figure 3.1. 3 FIGURE 3.1 Ubuntu's Gnome desktop uses the Compiz window manager and offers a selec- tion of Gnome themes. You can configure your desktop in various ways and by using different menu items under the Preferences menu, which can be found as part of the main Desktop menu. The myriad of configurations options allow you to tailor every aspect of your system's look and feel. In Figure 3.2 you can see a selection of the preferences options available to you. FIGURE 3.2 You can customize your Ubuntu desktop by using the Preference settings that are available in the System, Preferences menu. CHAPTER 3 Working with Gnome 54 Eye Candy for the Masses Recent development work carried out on X has allowed the introduction of a number of hardware-accelerated effects within Ubuntu and its window managers. No longer do you have to drool at your Mac OS X-using colleagues when they work; now Ubuntu has a whole load of "wow" effects designed to add that professional touch to Linux. Up until now, enabling these desktop effects has required a lot of work involving down- loading specific packages and also configuring some of them using the console. However, with Ubuntu 8.04 this has been done away with and desktop effects are available out of the box, depending on whether your graphics card is powerful enough. Ubuntu relies upon the Compiz window manager, which to most end users will not appear any differently to Metacity, the standard window manager in use by Ubuntu. You should already have the latest graphics card driver for your system as Ubuntu automati- cally gives you access to the proprietary driver through the Restricted Driver Manager. Check out Chapter 2, "Post-Installation Configuration," for more information on this tool. Once you have verified your graphic driver situation, you will find a menu option under System, Preferences called Appearance (see Figure 3.3). Open it up and select the tab called Visual Effects. By default this is set to Normal, but try setting it to Extra and see what happens. After a couple of seconds you may see your window decorations (title bar, mini- mize and maximize buttons) disappear and then reappear. It may seem that nothing has happened but grab hold of the window title bar and move it around. If everything has gone according to plan then it should wobble! Click Close to save the settings and welcome to a world of fancy effects. FIGURE 3.3 Use the Visual Effects tool to set the scene for some snazzy 3D effects. Basic X Concepts 55 The most obvious effect is that of "wobbly windows", which provide a fluid effect when you move your windows around the desktop area. Other effects include a smooth wipe from Desktop 1 to Desktop 2, activated by pressing Ctrl-Alt and either the left or right cursor key. Basic X Concepts The underlying engine of X11 is the X protocol, which provides a system of managing displays on local and remote desktops. The protocol uses a client/server model that allows an abstraction of the drawing of client windows and other decorations locally and over a 3 network. An X server draws client windows, dialog boxes, and buttons that are specific to the local hardware and in response to client requests. The client, however, does not have to be specific to the local hardware. This means that system administrators can set up a network with a large server and clients and enable users to view and use those clients on workstations with totally different CPUs and graphics displays. NOTE What better way to demonstrate the capability of X to handle remote clients than by using its capabilities to produce this chapter. Although the OpenOffice.org file for this chapter resided on a Mac mini (running Ubuntu), the display and keyboard used were actually part of an Acer Ferrari notebook running Ubuntu 7.10, via an ethernet connec- tion. Revisions were done using a Logitech keyboard and mouse of a desktop machine running Ubuntu 7.04, again connected to the Mac mini via X, but this time using a wire- less connection. Because X offers users a form of distributed processing, this means that Ubuntu can be used as a very cheap desktop platform for clients that connect to a powerful X server. The more powerful the X server, the larger the number of X-based clients that can be accommodated. This functionality can breathe new life into older hardware, pushing most of the graphical processing on to the server. A fast network is a must if you intend to run many X clients because X can become bandwidth-hungry. X is hugely popular in the UNIX and Linux world for a variety of reasons. The fact that it supports nearly every hardware graphics system is a strong point, as well as strong multi- platform programming standards give it a solid foundation of developers committed to X. Another key benefit of X is its networking capability, which plays a central point in administration of many desktops and can also assist in the deployment of a thin-client computing environment. Being able to launch applications on remote desktops and also standardize installations serve to highlight the versatility of this powerful application. More recent versions of X have also included support for shaped windows (that is, non- rectangular), graphical login managers (also known as display managers), and compressed fonts. Each release of X brings more features designed to enhance the user experience, including being able to customize how X client applications appear, right down to buttons CHAPTER 3 Working with Gnome 56 and windows. Most office and home environments run Linux and X on their local machines. The more-enlightened companies and users harness the power of the network- ing features of X, enabling thin-client environments and allowing the use of customized desktops designed specifically for that company. Having applications launch from a single location makes the lives of system administrators a lot easier because they have to work on only one machine, rather than several. Using X X.Org 7.3 is the X server that is used with Ubuntu. The base Xorg distribution consists of 30 packages (almost 120MB), which contain the server, along with support and develop- ment libraries, fonts, various clients, and documentation. An additional 1,000 or more X clients, fonts, and documentation are also included with Ubuntu. NOTE A full installation of X and related X.Org 7.4 files can consume more-usually much more-than 170MB of hard drive space. This is because additional clients, configura- tion files, and graphics (such as icons) are under the /usr/bin and /usr/share direc- tory trees. You can pare excessive disk requirements by judiciously choosing which X-related packages (such as games) to install on workstations. However, with the increased capacity of most desktop PC hard drives today, the size requirements are rarely a problem, except in configuring thin-client desktops or embedded systems. The /usr directory and its subdirectories contain the majority of Xorg's software. Some important subdirectories are . /usr/bin-This is the location of the X server and various X clients. (Note that not all X clients require active X sessions.) . /usr/include-This is the path to the files necessary for developing X clients and graphics such as icons. . /usr/lib-This directory contains required software libraries to support the X server and clients. . /usr/lib/X11-This directory contains fonts, default client resources, system resources, documentation, and other files that are used during X sessions and for various X clients. You will also find a symbolic link to this directory, named X11, under the /usr/lib directory. . /usr/lib/modules-This path to drivers and the X server modules used by the X server enables use of various graphics cards. The main components required for an active local X session are installed on your system if you choose to use a graphical desktop. These components are the X server, miscellaneous fonts, a terminal client (that is, a program that provides access to a shell prompt), and a Using X 57 client known as a window manager. Window managers, which are discussed later in this chapter (see the section "Selecting and Using Window Managers"), administer onscreen displays, including overlapping and tiling windows, command buttons, title bars, and other onscreen decorations and features. Elements of the xorg.conf File The most important file for Xorg is the xorg.conf configuration file, which can be located in the /etc/X11 directory. This file contains configuration information that is vital for X to function correctly, and is usually created during the installation of Ubuntu. Should you need to change anything post-install, you should use the system-config-display 3 application, which we cover later in this chapter. Information relating to hardware, moni- tors, graphics cards, and input devices is stored in the xorg.conf file, so be careful if you decide to tinker with it in a text editor! Bullet Proof X Ubuntu 8.04 LTS comes with a rather useful feature called Bullet Proof X. In short, it is designed to work no matter what may happen, so in the event of some cataclysmic event which destroys your main X system you will still have some graphical way of getting yourself back into a fully functional X-based system. Thanks to Bullet Proof X you shouldn't need to edit your xorg.conf file, but it can be a good idea to understand what it is made up of, in case you ever need to troubleshoot an X problem. Let's take a look at the contents of the file so that you can get an idea of what X is looking for. The components, or sections, of the xorg.conf file specify the X session or server layout, along with pathnames for files that are used by the server, any options relating directly to the server, any optional support modules needed, information relating to the mouse and keyboard attached to the system, the graphics card installed, the monitor in use, and of course the resolution and color depth that Ubuntu uses. Of the 12 sections of the file, these are the essential components: . ServerLayout-Defines the display, defines one or more screen layouts, and names input devices. . Files-Defines the location of colors, fonts, or port number of the font server. . Module-Tells the X server what graphics display support code modules to load. . InputDevice-Defines the input devices, such as the keyboard and mouse; multiple devices can be used. . Monitor-Defines the capabilities of any attached display; multiple monitors can be used. . Device-Defines one or more graphics cards and specifies what optional features (if any) to enable or disable. . Screen-Defines one or more resolutions, color depths, perhaps a default color depth, and other settings. CHAPTER 3 Working with Gnome 58 The following sections provide short descriptions of these elements; the xorg.conf man page contains full documentation of all the options and other keywords you can use to customize your desktop settings. The ServerLayout Section As noted previously, the ServerLayout section of the xorg.conf file defines the display and screen layouts, and it names the input devices. A typical ServerLayout section from an automatically configured xorg.conf file might look like this: Section "ServerLayout" Identifier "single head configuration" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" InputDevice "DevInputMice" "AlwaysCore" EndSection In this example, a single display is used (the numbers designate the position of a screen), and two default input devices, Mouse0 and Keyboard0, are used for the session. The Files Section The Files section of the xorg.conf file might look like this: Section "Files" RgbPath "/usr/lib/X11/rgb" FontPath "unix/:7100" EndSection This section lists available session colors (by name, in the text file rgb.txt) and the port number to the X font server. The font server, xfs, is started at boot time and does not require an active X session. If a font server is not used, the FontPath entry could instead list each font directory under the /usr/lib/X11/fonts directory, as in this example: FontPath "/usr/lib/X11/fonts/100dpi" FontPath "/usr/lib/X11/fonts/misc" FontPath "/usr/lib/X11/fonts/75dpi" FontPath "/usr/lib/X11/fonts/type1" FontPath "/usr/lib/X11/fonts/Speedo" ... These directories contain the default compressed fonts that are available for use during the X session. The font server is configured by using the file named config under the /etc/X11/fs directory. This file contains a listing, or catalog, of fonts for use by the font server. By adding an alternate-server entry in this file and restarting the font server, you can specify remote font servers for use during X sessions. This can help centralize font support and reduce local storage requirements (even though only 25MB is required for the almost 5,000 fonts installed with Ubuntu and X) . Using X 59 The Module Section The Module section of the xorg.conf file specifies loadable modules or drivers to load for the X session. This section might look like this: Section "Module" Load "dbe" Load "extmod" Load "fbdevhw" Load "glx" Load "record" 3 Load "freetype" Load "type1" Load "dri" EndSection These modules can range from special video card support to font rasterizers. The modules are located in subdirectories under the /usr/lib/modules directory. The InputDevice Section The InputDevice section configures a specific device, such as a keyboard or mouse, as in this example: Section "InputDevice" Identifier "Keyboard0" Driver "kbd" Option "XkbModel" "pc105" Option "XkbLayout" "us" EndSection Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "IMPS/2" Option "Device" "/dev/input/mice" Option "ZAxisMapping" "4 5" Option "Emulate3Buttons" "yes" EndSection You can configure multiple devices, and there might be multiple InputDevice sections. The preceding example specifies a basic keyboard and a two-button PS/2 mouse (actually, a Dell touchpad pointer). An InputDevice section that specifies use of a USB device could be used at the same time (to enable mousing with PS/2 and USB pointers) and might look like this: Section "InputDevice" Identifier "Mouse0" CHAPTER 3 Working with Gnome 60 Driver "mouse" Option "Device" "/dev/input/mice" Option "Protocol" "IMPS/2" Option "Emulate3Buttons" "off" Option "ZAxisMapping" "4 5" EndSection The Monitor Section The Monitor section configures the designated display device as declared in the ServerLayout section, as shown in this example: Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" DisplaySize 300 220 HorizSync 31.5-48.5 VertRefresh 50-70 Option "dpms" EndSection Note that the X server automatically determines the best video timings according to the horizontal and vertical sync and refresh values in this section. If required, old-style mode- line entries (used by distributions and servers prior to XFree86 4.0) might still be used. If the monitor is automatically detected when you configure X (see the "Configuring X" section, later in this chapter), its definition and capabilities are inserted in your xorg.conf file from the MonitorsDB database. This database contains more than 600 monitors and is located in the /usr/share/hwdata directory. The Device Section The Device section provides details about the video graphics chipset used by the computer, as in this example: Section "Device" Identifier "Intel Corporation Mobile 945GM/GMS,\ 943/940GML Express Integrated Graphics Controller" Driver "intel" BusID "PCI:0:2:0" EndSection Using X 61 This example identifies an installed video card as using an integrated Intel 945 graphics chipset. The Driver entry tells the Xorg server to load the intel kernel module. Different chipsets have different options. For example, here's the entry for a NeoMagic video chipset: Section "Device" Identifier "NeoMagic (laptop/notebook)" Driver "neomagic" VendorName "NeoMagic (laptop/notebook)" BoardName "NeoMagic (laptop/notebook)" Option "externDisp" Option "internDisp" 3 EndSection In this example, the Device section specifies the driver for the graphics card (neomagic_drv.o) and enables two chipset options (externDisp and internDisp) to allow display on the laptop's LCD screen and an attached monitor. The Xorg server supports hundreds of different video chipsets. If you configure X11 but subsequently change the installed video card, you need to edit the existing Device section or generate a new xorg.conf file, using one of the X configuration tools discussed in this chapter, to reflect the new card's capabilities. You can find details about options for some chipsets in a companion man page. You should look at these sources for hints about opti- mizations and troubleshooting. The Screen Section The Screen section ties together the information from the previous sections (using the Screen0, Device, and Monitor Identifier entries). It can also specify one or more color depths and resolutions for the session. Here's an example: Section "Screen" Identifier "Screen0" Device "Videocard0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 16 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection In this example a color depth of thousands of colors and a resolution of 1024×768 is the default, with optional resolutions of 800×600 and 640×480. Multiple Display subsection entries with different color depths and resolutions (with settings such as Depth 24 for millions of colors) can be used if supported by the graphics card and monitor combina- CHAPTER 3 Working with Gnome 62 tion. You can also use a DefaultDepth entry (which is 24, or thousands of colors, in the example), along with a specific color depth to standardize display depths in installations. You can also specify a desktop resolution larger than that supported by the hardware in your monitor or notebook display. This setting is known as a virtual resolution in the Display subsection. This allows, for example, an 800×600 display to pan (that is, slide around inside) a virtual window of 1024×768. NOTE If your monitor and graphics card support multiple resolutions and the settings are properly configured, you can use the key combination of Ctrl+Alt+Keypad+ or Ctrl+Alt+Keypad- to change resolutions on the fly during your X session. Configuring X Ubuntu usually does a good job of detecting your graphics card and monitor, although sometimes problems can arise if the PC's video card is not recognized. If your display is not configured correctly then Ubuntu thankfully provides some tools to help you make changes to the way your display is set up. You can use the following configuration tools, among others, to create a working xorg.conf file: . displayconfig-gtk-This is Ubuntu's graphical configuration tool, which launches a handy GUI tool to help create an xorg.conf file. . Xorg-The X server itself can create a skeletal working configuration. FIGURE 3.4 The displayconfig-gtk client provides a graphical configuration interface for creating or updating a system's xorg.conf file. Here you see the Screen Settings main screen, offering resolution and color-depth settings. Using X 63 The following sections discuss how to use each of these software tools to create a working xorg.conf file. Configuring X with the displayconfig-gtk Client You can use the displayconfig-gtk client to create or update an xorg.conf file. You can start by clicking the Screens and Graphics menu item found under System, Administration 3 FIGURE 3.5 displayconfig-gtk's hardware settings are used to configure a video card for X. if you are already running X. You will be asked to enter your password in order to open the application; once you've done this you'll see a window similar to Figure 3.4. FIGURE 3.6 You can scroll to select the correct graphics card to use for your X sessions. CHAPTER 3 Working with Gnome 64 The Screen Settings window shows the current selected screen, along with details of the model, resolutions available, the refresh rate, and orientation. In the event that you are using two screens (dual- or multi-head displays) then you have the ability to select whether it is the primary or secondary screen, and the physical location of it. If you click the Graphics Card tab, other configuration options become available, as shown in Figure 3.5. Click the name of the graphics card to open up a list of alternative cards (shown in Figure 3.6). Simply select a manufacturer to see a list of cards associated with that manufacturer and to choose the correct one for your X sessions. When you have finished your changes to your X server settings, you can quickly test them to see if they will work by clicking the Test button. Ubuntu will then attempt to use your chosen settings, allowing you to either choose to keep them or revert back to the original settings. If you are happy with the new mode then click Keep Configuration. Finally click the OK button to close the dialog box. You may then see a dialog advising that you have to log out and then log back in (or exit your X session and restart X) to use the new settings. The new settings will be stored in a new xorg.conf file under the /etc/X11 directory. If you find that the new settings do not work, you can simply copy the backup xorg.conf file named xorg.conf.backup to xorg.conf in the same directory to revert to your original settings. Using Xorg to Configure X You can create the xorg.conf file manually by typing one from scratch using a text editor, but you can also create one automatically by using the Xorg server or configuration utili- ties (as discussed in the previous sections). As the root operator, you can use the following on the server to create a test configuration file: # X -configure After you press Enter, a file named xorg.conf.new is created in root's home directory, the /root directory. You can then use this file for a test session, like this: # X -config /root/xorg.conf.new Starting X You can start X sessions in a variety of ways. The Ubuntu installer sets up the system to have Linux boot directly to an X session using a display manager (that is, an X client that provides a graphical login). After you log in, you use a local session (running on your computer) or, if the system is properly configured, an X session running on a remote computer on the network. Logging in via a display manager requires you to enter a username and password. You can also start X sessions from the command line. The following sections describe these two methods. NOTE If you have used the Server install then your system will boot to a text login-see "Command Line Quickstart" in Chapter 4 for more details on what to do here. Starting X 65 Using a Display Manager An X display manager presents a graphical login that requires a username and password to be entered before access is granted to the X desktop. It also allows you to choose a differ- ent desktop for your X session. Whether or not an X display manager is presented after you boot Linux is controlled by a runlevel-a system state entry in /etc/event.d/. The following runlevels as handled by Ubuntu are as follows: . 0 - halt (Do NOT set initdefault to this.) . 1 - Multiuser text mode . 2 - X - graphical multiuser mode 3 . 6 - reboot (Do NOT set initdefault to this.) You may see mention of Runlevels 3 through 5; these can be ignored, as they are treated the same as Runlevel 2 in Ubuntu. Historically Ubuntu used the /etc/inittab file to handle runlevels, but with upstart this file no longer exists. Instead there are several files under the /etc/events.d/ directory, including an individual file for each of the virtual consoles (accessible by pressing Ctrl-Alt-F1 to F7). However, you are still able to create an inittab file, if you want to override any defaults held by Ubuntu. Make sure you create the inittab file as root and include at least one line similar to the following: id:1:initdefault: This will force your system to start up in text mode. FIGURE 3.7 You use gdmsetup to configure the gdmlogin screen when using gdm as a display manager. CHAPTER 3 Working with Gnome 66 Configuring gdm The gdm display manager is part of the GNOME library and client distribution included with Ubuntu and provides a graphical login when a system boots directly to X. Its login (which is actually displayed by the gdmlogin client) hosts pop-up menus of window managers, languages, and system options for shutting down (halting) or rebooting the workstation. Although you can edit (as root) gdm.conf under the /etc/gdm directory to configure gdm, a much better way to configure GNOME's display manager is to use the gdmsetup client. You can use the gdmsetup client to configure many aspects of gdm. You launch this client from the System Menu, under Administration, Login Window. You will be prompted for your password and after you press Enter, you see the GDM Setup window, as shown in Figure 3.7. You can specify settings for security, remote network logins, the X server, and session and session chooser setup by clicking on the tabs in the GDM Setup dialog. On the General tab you'll see a handful of options, mostly to do with security. Showing visual feedback when entering passwords can be reassuring if you're not sure how many characters you've typed, although it can also pose a security risk if your password is a word closely associated with yourself. For instance, if your wife is named Bernice, and your password is seven characters long then it's a good bet that your password might be bernice. By default this setting is switched on, but it's more secure when it is turned off. Choosing circles rather than asterisks is a purely personal choice, and by default Ubuntu uses circles to show feedback when users enter passwords. Another fairly important security feature is the ability to prevent multiple logins from the same user. This might sound innocuous at first, but if your user account details have been compromised then someone else might be able to gain access to the system even while you're using it. Ubuntu allows you to login multiple times simultaneously, and we strongly recommend that you disable it. Next you are able to select your default window manager. Depending on what you have installed, you may see KDE and/or Xfce listed here. You'll also see a Failsafe entry for both GNOME and the terminal, which gives you access to stripped-down versions of both envi- ronments, in case anything prevents you from gaining access in the usual way. By default, Ubuntu uses the xclient script, which dictates your preferences. You can change this pref- erence by pressing the F10 key when you log in and choosing a different window manager. You'll be prompted whether you want to make the change permanent or one- time only. It's simpler, however, to just change it in the drop-down menu here. The option to use a gtkRC file should be ignored as it is for use in further configuring GNOME using GTK itself, and is outside the scope of this book. For the canonical refer- ence to GTK, head on over to http://library.gnome.org/devel/gtk/unstable/index.html. Finally you can force gdm to use the 24-hour clock format when logging in. In Figure 3.8 you can see the Local tab, which we look at in more detail now. The first option is to choose the style of greeter that will meet your users as they attempt to log on to the system. Ubuntu defaults to a graphical themed greeter, which is selected in the main selection area. You can change the selection by clicking one of the radio Starting X 67 3 FIGURE 3.8 Customize how gdm will look to local users as they log on. buttons to choose another theme, or, if you like randomness, you can select the Random from Selected option from the Theme drop-down menu and select multiple themes. That way, every time you boot up you'll see a different greeter depending on your selection. If you choose to see a plain greeter, then the window will change to that shown in Figure 3.9 to allow you to define your options. You can elect to use either a picture or a solid color to fill the screen, and by default Ubuntu selects a solid blue color in contrast with the usual brown coloring. You can play around with the settings, but we think you'll prefer the graphical greeter. Moving on to the Remote tab, you can choose how people who log on remotely (that is, via the network) to your computer are greeted. You can choose to mirror the local greeter, or use a plain or themed greeter, depending on what you've selected for the local greeter. Whatever you select, it will provide a similar set of options as in the local tab, with the exception of the Configure XDMCP button in the bottom-right corner, shown in Figure 3.10. CHAPTER 3 Working with Gnome 68 FIGURE 3.9 Keeping it simple is the order of the day for using the Plain greeter. What Is XDMCP? XDMCP is a great way to show off the networking capabilities of X. It stands for the X Display Manager Control Protocol and it allows you to remotely access your computer using an X terminal. Remember earlier when you read that this book was put together using various displays and computers? The secret behind all of it is XDMCP . Clicking the Configure XDMCP button takes you to another window that allows you to specify exactly how you want XDMCP to behave, as shown in Figure 3.11. For the most part, the default options are sufficient. Starting X 69 3 FIGURE 3.10 XDMCP-your route to remote logins, wherever you are on your network. FIGURE 3.11 If you have very specific XDMCP needs then you can use these options to tailor it to your requirements. CHAPTER 3 Working with Gnome 70 FIGURE 3.12 Lock down or loosen gdm depending on your requirements. TIP If you are not expecting many people to log on simultaneously via XDMCP you may want , to lower the Maximum remote sessions from its default of 16. That way you minimize the risk of unauthorized access to your system. If you click the Close button on the dialog box, you will then be able to access your system from another Linux system by using XDMCP. The next tab in the gdm setup dialog box deals with accessibility. Unless you have a specific need to, we suggest you leave this tab alone and move on to the more important Security tab, shown in Figure 3.12. The first two options (Enable Automatic Login and Enable Timed Login) are pretty fright- ening in our opinion, and we're grateful that they're disabled by default. The first option, when activated, assumes that your system will always log in with the same user that you select in the drop-down menu. If you value your security at all, then you will never enable this on a computer that is actually used by end users, as it provides an open door to your system, inviting the would-be hacker to take a shot at wrecking your system. We'd also recommend never enabling the timed login feature, as this effectively does the same thing Starting X 71 with the exception that you can set a time delay before Ubuntu logs in as the selected user. CAUTION We strongly recommend that you never set either of these two options. It's the equiva- lent of leaving your car unlocked, with the windows rolled down and signs up around it saying "Steal Me." Perhaps the only time you might consider selecting one or the other of these options is if you are creating a system that is designed to be used in a public access area, such as a kiosk or similar, where it would not be unusual for some dimwit to turn the computer off every so often! In this scenario, you may not be available to 3 log on to the system and may prefer it to default to the locked-down account that you would have created. Now that we have those two options out of the way, let's take a look at some of the others on this screen. If you want to deter people from logging in, setting a login retry delay is one of the best ways of doing it. By setting this option, you force Ubuntu to wait the specified number of seconds before allowing the user to attempt logging in again, should he or she enter an incorrect password. Although not guaranteed to keep the determined hacker out of your system, it will nonetheless slow this person down, hopefully enough that you'll notice something or someone is attempting to gain access. The Minimal UID option restricts logins to only those user accounts that have a UID of more than 1000. These are typically service accounts, but may include special accounts created by you that have a low UID. Make sure you don't set this number higher than any of your actual user account IDs; otherwise, you'll lock your users out of the system! The next two options (Allow Local and Allow Remote System Administrator Login), which govern logins by system administrators, are both disabled by default in Ubuntu. This disabling has to do with the way that Ubuntu handles system administration rights in that there is no "root" account to speak of. Check out the sidebar "The Root User" in Chapter 10, "Managing Users," for more information on how Ubuntu handles the root user. If you enable the root account then you can enable these two check boxes to allow you to log in either locally or remotely (via XDMCP) as the root user. If you are having problems with gdm or X, then you may want to enable the debug messages option as doing so may help you troubleshoot problems with your system. You'll commonly be asked to enable this option if you've made bug reports on Launchpad, the Ubuntu bug tracker. By default, Ubuntu is set to deny any TCP connections to the X server, thus restricting the ability to use X forwarding. Unless you have a very specific need, you should leave this setting as is. The final four options use permissions to ascertain whether users should be allowed to log in or not. The first option only allows the user to log in if she owns her home directory. CHAPTER 3 Working with Gnome 72 FIGURE 3.13 Include or exclude user accounts from appearing at login via the Users tab. By default, when creating new users, Ubuntu automatically assigns the new user as the owner of his or her home directory, so you should not need to change this option. The other options on this tab allow you to restrict whether a user can log in based on the permissions applied to his or her home directory. By default, as long as your home directory has the correct group write permissions set on it, that user will be allowed to log in. For a more detailed discussion of permissions and user security, head on over to Chapter 10. Finally, the Users tab (see Figure 3.13) enables you to specify which users are shown in the gdm login greeter that appears if you choose to use the face browser. By default, all regular users are shown in the greeter, but you can specifically hide different accounts according to your preferences by adding them to the exclude group. All the changes that we've covered will take effect the next time you restart GNOME. Configuring kdm The kdm client, which is part of KDE (which we cover later), offers a graphical login similar to gdm. You configure kdm by running the System Settings option in the Kicker (K Menu). When the System Settings window opens, click the Advanced tab and click on the Login Manager icon to see the window shown in Figure 3.14. Starting X 73 3 FIGURE 3.14 You configure kdm by choosing tabs and settings in the Login Manager dialog box. To make any changes to the KDE display manager while logged in as a regular user, you must first click the Administrator Mode button, and then enter your password. You can click on a tab in the Login Manager dialog to set configuration options. Options in these tabs allow you to control the login display, prompts, user icons, session management, and configuration of system options (for shutting down or rebooting). After you make your configuration choices in each tab, click the Apply button to apply the changes immedi- ately; otherwise, the changes are applied when the X server restarts. Using the xdm Display Manager The xdm display manager is part of the Xorg distribution and offers a bare-bones login for using X. Although it is possible to configure xdm by editing various files under the /etc/X11/xdm directory, GNOME and KDE offer a greater variety of options in display manager settings. The default xdm login screen's display is handled by the xsetroot client, which is included with Xorg. Changing Window Managers Ubuntu makes it fairly painless to switch to another window manager or desktop environ- ment. By desktop environment, we refer to not only the window manager but also the suite of related applications such as productivity or configuration tools. CHAPTER 3 Working with Gnome 74 FIGURE 3.15 Use the Select Session option to select the desktop environment of your choice before you log in. First of all you need to ensure that you have the relevant desktop environment installed on your system and the easiest way to do this is by installing the relevant *-desktop package (as described earlier in the sidebar, "The Ubuntu Family". You can do this either at the command line with a simple apt-get install kubuntu-desktop (in the case of a KDE desktop) or you can use synaptic to install the relevant packages; just search for desktop and look for Xubuntu or Kubuntu. Once the download and installation has completed (you might want to grab a coffee while you wait) you are all set to change environment. The first thing you need to do is to log out of Ubuntu by going to System, Quit. Then select the Log Out option. After a couple of seconds you will arrive at the graphical login prompt (as shown in Figure 3.15). At this point, press the F10 key to open the drop-down menu and click Select Session. Here you can choose to switch your session to KDE (for example) and once you've clicked OK you'll be asked whether you want to make this a permanent change or just for one session (i.e., to try it out). At this point, it's probably better to choose 'For this session only'. Enter your user name and password to log in to your new desktop environment. Don't worry; because you selected For This Session Only you haven't yet committed your- XFce 75 3 FIGURE 3.16 When you're ready to switch to another environment, use the Login Window to make the jump. self to switching permanently. Take the opportunity to try the new environment and make your mind up if you want to switch to it full time. If you have made your mind up to switch to another environment full time then you can do it by taking one of two routes. The first one is to go to the Login Window (found under System, Administration, Login Window under Gnome and also found under the Kicker Menu, System, Login Window within KDE) and select the relevant window manager from the Default Session drop-down list, as shown in Figure 3.16. Alternatively you can do it from the login window by pressing F10, clicking Select Session, choosing your desired window manager and selecting Make Default. This will set your default window manager to your specific choice. Regardless of which route you take it's easy to change back should you not like your new environment. CHAPTER 3 Working with Gnome 76 FIGURE 3.17 Unlimited customization options abound within KDE; just be prepared to switch! FIGURE 3.18 XFce-lightweight and simplicity, molded together in a great package. The next section gives you a brief introduction to the two other main window managers other than Gnome that are available either in Kubuntu or Xubuntu. XFce 77 KDE-The Other Environment One of the great things about Ubuntu is the choice it allows you. When Ubuntu was origi- nally released, it favored the Gnome desktop, but fairly early on the decision was made to create a KDE alternative named Kubuntu. If you install the kubuntu-desktop package (either using apt-get or synaptic) then you will have access to KDE and the associated Kubuntu applications. KDE is somewhat different from Gnome in that it uses the QT libraries rather than GTK libraries, so the windows and other elements look different. Linus Torvalds himself has in the past expressed a distinct preference for KDE, and it also helps that KDE allows you to 3 customize your working environment in pretty much any way imaginable. CHAPTER 3 Working with Gnome 78 A standard KDE desktop is shown in Figure 3.17. XFce XFce is another desktop environment, suitable for computers with not much memory or processing power. It's based upon the same GTK libraries that are in use by Gnome, so it shares some of the look and feel of the Gnome desktop. That said, it comes bundled with a number of Xfce-specific applications to replace Gnome tools such as nautilus. Some people just prefer the simplicity of Xfce, so we will leave it up to you if you want to use it. You can get access to it by installing the xubuntu-desktop package (either with apt- get or synaptic) and a sample desktop is shown in Figure 3.18. Reference . http://www.x.org/-Curators of the X Window System. . http://www.x.org/Downloads_mirror.html-Want to download the source to the latest revision of X? Start at this list of mirror sites. . http://www.xfree86.org/-Home of The XFree86 Project, Inc., which provided a graphical interface for Linux for nearly 10 years. . http://www.kde.org/-The place to get started when learning about KDE and the latest developments. . http://www.gnome.org/-The launch point for more information about GNOME, links to new clients, and GNOME development projects. . http://www.compiz.org/-The official page for the Compiz project, including Compiz Fusion, a set of plugins for the Compiz window manager. . http://www.xfce.org/-The official home page for the XFce project. 4 CHAPTER IN THIS CHAPTER . What Is the Command Line? Command Line . Logging Into and Working with Linux Quickstart . Getting to the Command Line . Using the Text Editors . Working with Permissions The command line is one of the most powerful tools . Working as Root available for use with Ubuntu, and indeed Linux. . Reading Documentation Knowledge of the commands associated with it and also . Reference how to string them together will make your life with Ubuntu much easier. This chapter looks at some of the basic commands that you need to know to be productive at the command line. You will find out how to get to the command line, and also get to grips with some of the commands used to navigate around the file system. Later on in this book is the Command Line Masterclass (Chapter 30), which explores the subject in more depth. The skills you learn in this chapter will give you confidence when you're called upon to work at the command line. What Is the Command Line? Hang around Linux users for any length of time and it will not be long before you hear them speak in hushed tones about the command line or the terminal. Quite rightly too, as the command line offers a unique and powerful way to interact with Linux. However, for the most part you may never need to access the command line because Ubuntu offers a slew of graphical tools that enable you to configure most things on your system. But sometimes things go wrong and you may not have the luxury of a graphical interface to work with. It is in these situations that a fundamental understanding of the command line and its uses can be a real life saver. CHAPTER 4 Command Line Quickstart 80 NOTE In Chapter 3, "Working with Gnome," you learned about BulletProofX, a project whose goal it is to always provide a fallback if your X server fails. Under Ubuntu 8.04, this has been further improved, although there will still be some instances where even BulletProofX won't save you. Don't be tempted to skip over this chapter as irrelevant; rather, work through the chap- ter and ensure that you are comfortable with the command line before moving on. It is tempting to think of the command line as the product of some sort of black and arcane art, and in some ways it can appear to be extremely difficult and complicated to use. However, perseverance is key and by the end of this chapter you should at least be comfortable with using the command line and ready to move onto Chapter 30, "Command Line Masterclass." More importantly, though, you will be able to make your way around a command line-based system, which you are likely to encounter if you work within a server environ- ment. This chapter introduces you to a number of commands, including commands that enable you to do the following tasks: . Perform routine tasks-Logging in and out, using the text console, changing pass- words, listing and navigating directories . Implement basic file management-Creating files and folders, copying or moving them around the file system, renaming and ultimately deleting them (if necessary) . Execute basic system management-Shutting down or rebooting, reading man pages, and using text-based tools to edit system configuration files The information in this chapter is valuable for individual users or system administrators who are new to Linux and are learning to use the command line for the first time. TIP Those of you who have used a computer for many years will probably have come into contact with MS-DOS, in which case being presented with a black screen will fill you with a sense of nostalgia. Don't get too comfy; the command line in Linux is far supe- rior to its distant MS-DOS cousin. Whereas MS-DOS skills are transferable only to other MS-DOS environments, the skills that you learn at the Linux command line can be transferred easily to other Unix-like operating systems, such as Solaris, OpenBSD, FreeBSD, and even Mac OS X, which allows you access to the terminal. What Is the Command Line? 81 User Accounts One concept you will have to get used to is that of user-based security. By and large, only two types of users will access the system as actual users. The first type is the regular user, of which you created one when you started Ubuntu for the first time (see Chapter 1, "Installing Ubuntu"). These users can change anything that is specific to them, such as the wallpaper on the desktop, their personal preferences, and so on. Note that the emphasis should be on anything that is specific to them, as it prevents regular users from making system-wide changes that could affect other users. To make system-wide changes, you need to use super-user privileges which you should have if your account was the first one specified (i.e. when you specified a user during the installation). With super-user privileges you basically have access to the entire system and can carry out any task, even destructive ones! In order to use your super- 4 user privileges you need to prefix the command you wish to execute with the command sudo. When you hit enter (after typing the remaining command) you will be prompted for your password, which you should type in followed by the Enter key. Ubuntu will then carry out the command, but with super-user privileges. An example of the destructive nature of working as the super-user can be found in the age-old example of $sudo rm -rf /, which erases all the data on your hard drive. You need to be especially careful when using your super-user privileges, otherwise you may make irreparable damage to your system. Don't let this worry you, though, as the ability to work as the super-user is fundamen- tal to a healthy Linux system. Without it you would not be able to install new software, edit system configuration files, or do any number of administration tasks. By the end of this chapter you will feel comfortable working with your super-user privileges and be able to adequately administer your system. Ubuntu works slightly differently to other Linux distributions by giving users super-user privileges by default. If you work with any other Linux distro you will quickly come across the root user, which is a super-user account. So rather than having to type in sudo before every command, the root account can simply issue the command and not have to worry about entering a password. You can tell when you are working at a root prompt because you will see the pound sign (#). Within Ubuntu the root account is disabled by default in preference to giving super-user privileges to users. If you wish to enable the root account then issue the command sudo passwd. When prompted, enter your user password. You will then be asked for a new UNIX password; this will be the password for the root account, so make sure and remember it. You will also be prompted to repeat the password, in case you've made any mistakes. Once you've typed it in and pressed Enter, the root account will now be active. You'll find out how to switch to root later on. An alternative way of getting a root prompt, without having to enable the root account, is to issue the command sudo -i. After entering your password you will find yourself at a root prompt (#). Do what you need to do and when you are finished, type exit and press Enter to return to your usual prompt. CHAPTER 4 Command Line Quickstart 82 As with most things, Ubuntu offers you a number of ways to access the command line. You can use the Terminal entry in Applications, Accessories, but by far the simplest way is to press Ctrl + Alt + F1. Ubuntu switches to a black screen and a traditional login prompt that resembles the following: Ubuntu 8.04(Hardy) hardy-dev tty1 hardy-dev login: TIP This is actually one of six virtual consoles that Ubuntu provides for your use. After you have accessed a virtual console, you can use the Alt key and F1 through F6 to switch to a different console. If you want to get back to the graphical interface, press Alt + F7. You can also switch between consoles by holding the Alt key and pressing either the left or the right cursor key to move down or up a console, such as tty1 to tty2. Ubuntu is waiting for you to log in as a user, so go ahead and enter your username and press the return key. Ubuntu then prompts you for your password, which you should enter. Note that Ubuntu does not show any characters while you are typing your password in. This is a good thing because it prevents any shoulder surfers from seeing what you've typed or the length of the password. Hitting the Return key drops you to a shell prompt, signified by the dollar sign: andrew@hardy-dev ~]$ This particular prompt tells me that I am logged in as the user andrew on the system hardy-dev and I am currently in my home directory (Linux uses the tilde as shorthand for the home directory). TIP Navigating through the system at the command line can get confusing at times, espe- cially when a directory name occurs in several different places. Fortunately, Linux includes a simple command that tells you exactly where you are in the file system. It's easy to remember because the command is just an abbreviation of present working directory, so type pwd at any point to get the full path of your location. For example, typing pwd after following these instructions shows /home/yourusername, meaning that you are currently in your home directory. Using the pwd command can save you a lot of frustration when you have changed direc- tory half a dozen times and have lost track. Another way to quickly access the terminal is to go to Applications, Accessories and choose the Terminal entry. Ubuntu opens up gnome-terminal, which allows you to access What Is the Command Line? 83 the terminal while remaining in Gnome. This time, the terminal appears as black text on a white background. Accessing the terminal this way, or by using the Ctrl + Alt + F1 method makes no difference because you are interacting directly with the terminal itself. Navigating Through the File System Use the cd command to navigate through the Ubuntu file system. This command is gener- ally used with a specific directory location or pathname, like this: $ cd /etc/apt/ Under Ubuntu, the cd command can also be used with several shortcuts. For example, to quickly move up to the parent (higher-level) directory, use the cd command like this: $ cd .. 4 To return to one's home directory from anywhere in the Linux file system, use the cd command like this: $ cd You can also use the $HOME shell environment variable to accomplish the same thing. Type this command and press Enter to return to your home directory: $ cd $HOME You can accomplish the same thing by using the tilde (~) like this: $ cd ~ Don't forget the pwd command to remind you where you are within the file system! Another important command to use is the ls command, which lists the contents of the current directory. It's commonly used by itself, but a number of options (or switches) available for ls give you more information. For instance, the following command returns a listing of all the files and directories within the current directory, including any hidden files (denoted by a . prefix) as well as a full listing, so it will include details such as the permissions, owner and group, size and last modified time and date: $ ls -al You can also issue the command $ ls -R which scans and lists all the contents of the sub-directories of the current directory. This might be a lot of information, so you may want to redirect the output to a text file so you can browse through it at your leisure by using the following: $ ls -alR > listing.txt CHAPTER 4 Command Line Quickstart 84 TIP The previous command sends the output of ls -alR to a file called listing.txt, and demonstrates part of the power of the Linux command line. At the command line you are able to use files as inputs to commands, or generate files as outputs as shown. For more information about combining commands, see Chapter 30. We've included a table showing some of the top-level directories that are part of a stan- dard Linux distro in Table 4.1. TABLE 4.1 Basic Linux Directories Name Description The root directory / Essential commands /bin Boot loader files, Linux kernel /boot Device files /dev System configuration files /etc User home directories /home Initial RAM disk boot support (used during boot time) /initrd Shared libraries, kernel modules /lib Directory for recovered files (if found after a file system check) /lost+found Mount point for removable media, such as DVDs and floppy disks /media Usual mount point for local, remote file systems /mnt Add-on software packages /opt Kernel information, process control /proc Super-user (root) home /root System commands (mostly root only) /sbin Holds information relating to services that run on your system /srv Real-time information on devices used by the kernel /sys Temporary files /tmp Secondary software file hierarchy /usr Variable data (such as logs); spooled files /var Knowing these directories can aid you in partitioning in any future systems, letting you choose to put certain directories on their own distinct partition. Some of the important directories in Table 4.1, such as those containing user and root commands or system configuration files, are discussed in the following sections. You use and edit files under these directories when you use Ubuntu. What Is the Command Line? 85 Linux also includes a number of GNU commands you can use to search the file system. These include the following: . whereis command-Returns the location of the command and its man page. . whatis command-Returns a one-line synopsis from the command's man page. . locate file-Returns locations of all matching file(s); an extremely fast method of searching your system because locate searches a database containing an index of all files on your system. However, this database (about 4MB in size and named slocate.db, under the /var/lib/slocate directory) is built daily at 4:20 a.m. by default, and does not contain pathnames to files created during the workday or in the evening. If you do not keep your machine on constantly, you can run the updatedb command either using sudo or by using the root account to manually start the building of the database. . apropos subject-Returns a list of commands related to subject. 4 Managing Files with the Shell Managing files in your home directory involves using one or more easily remembered commands. If you have any familiarity with the now-ancient DOS, you recognize some of these commands (although their names are different from those you remember). Basic file management operations include paging (reading), moving, renaming, copying, searching, and deleting files and directories. These commands include the following: . cat filename-Outputs contents of filename to display . less filename-Allows scrolling while reading contents of filename . mv file1 file2-Renames file1 to file2 . mv file dir-Moves file to specified directory . cp file1 file2-Copies file1 and creates file2 . rm file-Deletes file . rmdir dir-Deletes directory (if empty) . grep string file(s)-Searches through files(s) and displays lines containing match- ing string Note that each of these commands can be used with pattern-matching strings known as wildcards or expressions. For example, to delete all files in the current directory beginning with the letters abc, you can use an expression beginning with the first three letters of the desired filenames. An asterisk (*) is then appended to match all these files. Use a command line with the rm command like this: $ rm abc* Linux shells recognize many types of filenaming wildcards, but this is different from the capabilities of Linux commands supporting the use of more complex expressions. You learn more about using wildcards in Chapter 11, "Automating Tasks." CHAPTER 4 Command Line Quickstart 86 NOTE Learn more about using expressions by reading the grep manual pages (man grep). Working with Compressed Files Another file management operation is compression and decompression of files, or the creation, listing, and expansion of file and directory archives. Linux distributions usually include several compression utilities you can use to create, compress, expand, or list the contents of compressed files and archives. These commands include . bunzip2-Expands a compressed file . bzip2-Compresses or expands files and directories . gunzip-Expands a compressed file . gzip-Compresses or expands files and directories . tar-Creates, expands, or lists the contents of compressed or uncompressed file or directory archives known as tape archives or tarballs Most of these commands are easy to use. The tar command, however, has a somewhat complex (although capable) set of command-line options and syntax. Even so, you can quickly learn to use tar by remembering a few simple invocations on the command line. For example, to create a compressed archive of a directory, use tar's czf options like this: $ tar czf dirname.tgz dirname The result is a compressed archive (a file ending in .tgz) of the specified directory (and all files and directories under it). Add the letter v to the preceding options to view the list of files added during compression and archiving. To list the contents of the compressed archive, substitute the c option with the letter t, like this: $ tar tzf archive Of course, if many files are in the archive, a better invocation (to easily read or scroll through the output) is $ tar tzf archive | less TIP In the previous code example, we used a pipe character (|). Each pipe sends the out- put of the first command to the next command. This is another of the benefits of the command line under Linux-you can string several commands together to get the desired results. To expand the contents of a compressed archive, use tar's zxf options, like so: $ tar zxf archive What Is the Command Line? 87 The tar utility decompresses the specified archive and extracts the contents in the current directory. Use Essential Commands from the /bin and /sbin Directories The /bin directory (about 5MB if you do a full install) contains essential commands used by the system for running and booting Linux. In general, only the root operator uses the commands in the /sbin directory. Many (though not all) these commands are statically linked which means that such commands do not depend on software libraries residing under the /lib or /usr/lib directories. Nearly all the other applications on your system are dynamically linked-meaning that they require external software libraries (also known as shared libraries) to run. Use and Edit Files in the /etc Directory More than 10MB of system configuration files and directories reside under the /etc direc- 4 tory if you install all the software included with this book. Some major software packages, such as Apache, OpenSSH, and xinetd, have directories of configuration files under /etc. Other important system-related configuration files in /etc are . fstab-The file system table is a text file listing each hard drive, CD-ROM, floppy, or other storage device attached to your PC. The table indexes each device's partition information with a place in your Linux file system (directory layout) and lists other options for each device when used with Linux (see Chapter 32, "Kernel and Module Management"). Nearly all entries in fstab can be manipulated by root using the mount command. . modprobe.d/-This folder holds all the instructions to load kernel modules that are required as part of the system startup, and replaces the historic modprobe.conf file. . passwd-The list of users for the system, along with user account information. The contents of this file can be changed by various programs, such as useradd or chsh. . shells-A list of approved shells (command-line interfaces). Protect the Contents of User Directories-/home The most important data on a Linux system resides in the user's directories, found under the /home directory. Segregating the system and user data can be helpful in preventing data loss and making the process of backing up easier. For example, having user data reside on a separate file system or mounted from a remote computer on the network might help shield users from data loss in the event of a system hardware failure. Use the Contents of the /proc Directory to Interact with the Kernel The content of the /proc directory is created from memory and exists only while Linux is running. This directory contains special "files" that either extract information from or send information to the kernel. Many Linux utilities extract information from dynami- cally created directories and files under this directory, also known as a virtual file system. For example, the free command obtains its information from a file named meminfo: CHAPTER 4 Command Line Quickstart 88 $ free total used free shared buffers cached Mem: 1026320 822112 204208 0 41232 481412 -/+ buffers/cache: 299468 726852 Swap: 2031608 0 2031608 This information constantly changes as the system is used. You can get the same informa- tion by using the cat command to see the contents of the meminfo file: $ cat /proc/meminfo MemTotal: 1026320 kB MemFree: 204200 kB Buffers: 41252 kB Cached: 481412 kB SwapCached: 0 kB Active: 307232 kB Inactive: 418224 kB HighTotal: 122692 kB HighFree: 244 kB LowTotal: 903628 kB LowFree: 203956 kB SwapTotal: 2031608 kB SwapFree: 2031608 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 202804 kB Mapped: 87864 kB Slab: 21736 kB SReclaimable: 12484 kB SUnreclaim: 9252 kB PageTables: 5060 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 2544768 kB Committed_AS: 712024 kB VmallocTotal: 114680 kB VmallocUsed: 6016 kB VmallocChunk: 108148 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 4096 kB The /proc directory can also be used to dynamically alter the behavior of a running Linux kernel by "echoing" numerical values to specific files under the /proc/sys directory. For example, to "turn on" kernel protection against one type of denial of service (DOS) attack What Is the Command Line? 89 known as SYN flooding, use the echo command to send the number 1 (one) to the follow- ing /proc path: $ sudo echo 1 >/proc/sys/net/ipv4/tcp_syncookies Other ways to use the /proc directory include . Getting CPU information, such as the family, type, and speed from /proc/cpuinfo. . Viewing important networking information under /proc/net, such as active inter- faces information under /proc/net/dev, routing information in /proc/net/route, and network statistics in /proc/net/netstat. . Retrieving file system information. . Reporting media mount point information via USB; for example, the Linux kernel reports what device to use to access files (such as /dev/sda) if a USB camera or 4 hard drive is detected on the system. You can use the dmesg command to see this information. . Getting the kernel version in /proc/version, performance information such as uptime in /proc/uptime, or other statistics such as CPU load, swap file usage, and processes in /proc/stat. Work with Shared Data in the /usr Directory The /usr directory contains software applications, libraries, and other types of shared data for use by anyone on the system. Many Linux system administrators give /usr its own partition. A number of subdirectories under /usr contain manual pages (/usr/share/man), software package shared files (/usr/share/name_of_package, such as /usr/share/emacs), additional application or software package documentation (/usr/share/doc), and an entire subdirectory tree of locally built and installed software, /usr/local. Temporary File Storage in the /tmp Directory As its name implies, the /tmp directory is used for temporary file storage; as you use Linux, various programs create files in this directory. Access Variable Data Files in the /var Directory The /var directory contains subdirectories used by various system services for spooling and logging. Many of these variable data files, such as print spooler queues, are temporary, whereas others, such as system and kernel logs, are renamed and rotated in use. Incoming electronic mail is usually directed to files under /var/spool/mail. CHAPTER 4 Command Line Quickstart 90 Linux also uses /var for other important system services. These include the top-most File Transfer Protocol (FTP) directory under /var/ftp (see Chapter 18, "Remote File Serving with FTP"), and the Apache web server's initial home page directory for the system, /var/www/html. (See Chapter 17, "Apache Web Server Management," for more information on using Apache.) Logging In to and Working with Linux You can access and use a Linux system in a number of ways. One way is at the console with a monitor, keyboard, and mouse attached to the PC. Another way is via a serial console, either by dial-up via a modem or a PC running a terminal emulator and connected to the Linux PC via a null modem cable. You can also connect to your system through a wired or wireless network, using the telnet or ssh commands. The information in this section shows you how to access and use the Linux system, using physical and remote text-based logins. NOTE This chapter focuses on text-based logins and use of Linux. Graphical logins and using a graphical desktop are described in Chapter 3, "Working with Gnome." Text-based Console Login If you sit down at your PC and log in to a Linux system that has not been booted to a graphical login, you see a prompt similar to this one: Ubuntu 8.04 (hardy) ubuntu tty1 login: Your prompt might vary, depending on the version of Ubuntu you are using. In any event, at this prompt, type in your username and press Enter. When you are prompted for your password, type it in and press Enter. NOTE Note that your password is not echoed back to you, which is a good idea. Why is it a good idea? Well, people are prevented from looking over your shoulder and seeing your screen input. It is not difficult to guess that a five-letter password might correspond to the user's spouse's first name! Logging Out Use the exit or logout commands to exit your session. Type the command and press Enter. You are then returned to the login prompt. If you use virtual consoles, remember to exit each console before leaving your PC. (Otherwise, someone could easily sit down and use your account.) Logging In to and Working with Linux 91 Logging In and Out from a Remote Computer Although you can happily log in on your computer, an act known as a local login, you can also log in to your computer via a network connection from a remote computer. Linux- based operating systems provide a number of remote access commands you can use to log in to other computers on your local area network (LAN), wide area network (WAN), or the Internet. Note that not only must you have an account on the remote computer, but the remote computer must be configured to support remote logins-otherwise, you won't be able to log in. NOTE See Chapter 14, "Networking" to see how to set up network interfaces with Linux to support remote network logins and Chapter 11 to see how to start remote access ser- vices (such as sshd). 4 The best and most secure way (barring future exploits) to log in to a remote Linux computer is to use the ssh or Secure Shell client. Your login and session are encrypted while you work on the remote computer. The ssh client features many different command-line options, but can be simply used with the name or IP address of the remote computer, like this: [andrew@hardy-dev ~]$ ssh 192.168.0.41 The authenticity of host '192.168.0.41 (192.168.0.41)' can't be established. RSA key fingerprint is e1:db:6c:da:3f:fc:56:1b:52:f9:94:e0:d1:1d:31:50. Are you sure you want to continue connecting (yes/no)? yes The first time you connect with a remote computer using ssh, Linux displays the remote computer's encrypted identity key and asks you to verify the connection. After you type yes and press Enter, you are warned that the remote computer's identity (key) has been entered in a file named known_hosts under the .ssh directory in your home directory. You are also prompted to enter your password: Warning: Permanently added '192.168.0.41' (RSA) \ to the list of known hosts. andrew@192.168.0.41's password: andrew~$ After entering your password, you can then work on the remote computer. Again, every- thing you enter on the keyboard in communication with the remote computer is encrypted. Use the exit or logout commands to exit your session and return to the shell on your computer. CHAPTER 4 Command Line Quickstart 92 Using Environment Variables A number of in-memory variables are assigned and loaded by default when the user logs in. These variables are known as shell environment variables, which can be used by various commands to get information about your environment, such as the type of system you are running, your home directory, and the shell in use. Environment variables are used by Linux operating systems to help tailor the computing environment of your system, and include helpful specifications and setup, such as default locations of executable files and software libraries. If you begin writing shell scripts, you might use environment variables in your scripts. Until then, you only need to be aware of what environment variables are and do. The following list includes a number of environment variables, along with descriptions of how the shell uses them: . PWD-To provide the name of the current working directory, used by the pwd command (such as /home/andrew/foo) . USER-To declare the user's name, such as andrew . LANG-To set language defaults, such as English . SHELL-To declare the name and location of the current shell, such as /bin/bash . PATH-To set the default location of executable files, such as /bin, /usr/bin, and so on . TERM-To set the type of terminal in use, such as vt100, which can be important when using screen-oriented programs, such as text editors . MACHINE-To declare system type, system architecture, and so on NOTE Each shell can have its own feature set and language syntax, as well as a unique set of default environment variables. See Chapter 15, "Remote Access for SSH and Telnet," for more information about using the different shells included with Ubuntu. At the command line, you can use the env or printenv commands to display these envi- ronment variables, like so: $ env SSH_AGENT_PID=5761 SHELL=/bin/bash DESKTOP_STARTUP_ID= TERM=xterm Logging In to and Working with Linux 93 GTK_RC_FILES=/etc/gtk/gtkrc:/home/andrew/.gtkrc-1.2-gnome2 WINDOWID=56623199 USER=andrew ... USERNAME=andrew PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games DESKTOP_SESSION=default GDM_XSERVER_LOCATION=local 4 PWD=/usr/local LANG=en_GB.UTF-8 GNOME_KEYRING_PID=5714 GDM_LANG=en_GB.UTF-8 SHLVL=1 HOME=/home/andrew LOGNAME=andrew XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/usr/share/gdm/ ... LESSOPEN=| /usr/bin/lesspipe %s WINDOWPATH=7 DISPLAY=:0.0 LESSCLOSE=/usr/bin/lesspipe %s %s COLORTERM=gnome-terminal XAUTHORITY=/home/andrew/.Xauthority _=/usr/bin/env CHAPTER 4 Command Line Quickstart 94 OLDPWD=/usr/share/locale This abbreviated list shows a few common variables. These variables are set by configura- tion or resource files contained in the /etc, /etc/skel, or user /home directory. You can find default settings for bash, for example, in /etc/profile, /etc/bashrc, .bashrc, or .bash_profile files installed in your home directory. Read the man page for bash for details about using these configuration files. One of the most important environment variables is $PATH, which defines the location of executable files. For example, if, as a regular user, you try to use a command that is not located in your $PATH (such as the imaginary command command), you will see some- thing like this: $ command -bash: command: command not found NOTE If the command that you're trying to execute exists, but is not yet installed on your system, then Ubuntu will prompt you to install it, even giving you the correct com- mand to do so. However, you might know that command is definitely installed on your system, and you can verify this by using the whereis command, like so: $ whereis command command: /sbin/command You can also run the command by typing its full pathname, or complete directory specifi- cation like this: $ /sbin/command As you can see in this example, the command command is indeed installed. What happened is that by default, the /sbin directory is not in your $PATH. One of the reasons for this is that commands under the /sbin directory are normally intended to be run only by root. You can add /sbin to your $PATH by editing the file .bash_profile in your home directory (if you use the bash shell by default, like most Linux users). Look for the following line: PATH=$PATH:$HOME/bin You can then edit this file, perhaps using the vi editor (discussed in this chapter), to add the /sbin directory like so: PATH=$PATH:/sbin:$HOME/bin Using the Text Editors 95 Save the file. The next time you log in, the /sbin directory is in your $PATH. One way to use this change right away is to read in the new settings in .bash_profile by using the bash shell's source command like so: $ source .bash_profile You can now run commands located in the /sbin directory without the need to explicitly type the full pathname. Some Linux commands also use environment variables, for example, to acquire configura- tion information (such as a communications program looking for a variable such as BAUD_RATE, which might denote a default modem speed). To experiment with the environment variables, you can modify the PS1 variable to manip- ulate the appearance of your shell prompt. If you are working with bash, you can use its built-in export command to change the shell prompt. For example, if your default shell 4 prompt looks like [andrew@laptop ~]$ You can change its appearance by using the PS1 variable like this: $ PS1='$OSTYPE r00lz ->' After you press Enter, you see linux-gnu r00lz -> NOTE See the bash man page for other variables you can use for prompt settings. Using the Text Editors Linux distributions include a number of applications known as text editors that you can use to create text files or edit system configuration files. Text editors are similar to word processing programs, but generally have fewer features, work only with text files, and might or might not support spell checking or formatting. The text editors range in features and ease of use, but are found on nearly every Linux distribution. The number of editors installed on your system depends on what software packages you've installed on the system. CHAPTER 4 Command Line Quickstart 96 Some of the console-based text editors are . emacs-The comprehensive GNU emacs editing environment, which is much more than an editor; see the section "Working with emacs" later in this chapter . joe-Joe's Own Editor, a text editor, which can be used to emulate other editors . nano-A simple text editor similar to the pico text editor included with the pine email program . vim-An improved, compatible version of the vi text editor (which we call vi in the rest of this chapter because it has a symbolic link named vi and a symbolically linked manual page) Note that not all text editors described here are screen oriented. Some of the text editors for the X Window System, which provide a graphical interface, such as menu bars, buttons, scrollbars and so on, are . gedit-A GUI text editor for GNOME . kate-A simple KDE text editor . kedit-Another simple KDE text editor A good reason to learn how to use a text-based editor, such as vi, is that system mainte- nance and recovery operations generally never take place during X Window sessions (negating the use of a GUI editor). Many larger, more complex and capable editors do not work when Linux is booted to its single-user or maintenance mode. If anything does go wrong with your system, you probably won't be able to get into the X Window system, making knowledge and experience of using both the command line and text editors such as vi important. Make a point of opening some of the editors and playing around with them; you never know-you might just thank me someday! Another reason to learn how to use a text-based editor under the Linux console mode is so that you can edit text files through dial-up or network shell sessions because many servers do not host graphical desktops. Working with vi The editor found on nearly every Unix and Linux system is, without a doubt, the vi editor, originally written by Bill Joy. This simple-to-use but incredibly capable editor features a somewhat cryptic command set, but you can put it to use with only a few commands. Although more experienced Unix and Linux users continue to use vi extensively during computing sessions, many newer users might prefer learning an easier-to-use text editor such as pico or GNU nano. Die-hard GNU fans and programmers definitely use emacs. That said, learning how to use vi is a good idea. You might need to edit files on a Linux system with a minimal install, or a remote server without a more extensive offering of installed text editors. Chances are better than good that vi will be available. You can start an editing session by using the vi command like this: $ vi file.txt Using the Text Editors 97 The vi command works by using an insert (or editing) mode, and a viewing (or command) mode. When you first start editing, you are in the viewing mode. You can use your cursor or other navigation keys (as shown later) to scroll through the text. To start editing, press the i key to insert text or the a key to append text. When finished, use the Esc key to toggle out of the insert or append modes and into the viewing (or command) mode. To enter a command, type a colon (:), followed by the command, such as w to write the file, and press Enter. Although vi supports many complex editing operations and numerous commands, you can accomplish work by using a few basic commands. These basic vi commands are . Cursor movement-h, j, k, l (left, down, up, and right) . Delete character-x 4 . Delete line-dd . Mode toggle-Esc, Insert (or i) . Quit-:q . Quit without saving-:q! . Run a shell command-:sh (use 'exit' to return) . Save file-:w . Text search-/ NOTE Use the vimtutor command to quickly learn how to use vi's keyboard commands. The tutorial takes less than 30 minutes, and it teaches new users how to start or stop the editor, navigate files, insert and delete text, and perform search, replace, and insert operations. Working with emacs Richard M. Stallman's GNU emacs editor, like vi, is included with Ubuntu and nearly every other Linux distribution. Unlike other Unix and Linux text editors, emacs is much more than a simple text editor-it is an editing environment and can be used to compile CHAPTER 4 Command Line Quickstart 98 and build programs, act as an electronic diary, appointment book and calendar, compose and send electronic mail, read Usenet news, and even play games. The reason for this capability is that emacs contains a built-in language interpreter that uses the Elisp (emacs LISP) programming language. emacs is not installed in Ubuntu by default; instead you'll need to install it using apt-get or synaptic. The package you need is simply emacs. You can start an emacs editing session like this_FIRST: $ emacs file.txt TIP If you start emacs when using X11, the editor launches in its own floating window. To force emacs to display inside a terminal window instead of its own window (which can be useful if the window is a login at a remote computer), use the -nw command-line option like this: emacs -nw file.txt. The emacs editor uses an extensive set of keystroke and named commands, but you can work with it by using a basic command subset. Many of these basic commands require you to hold down the Ctrl key, or to first press a meta key (generally mapped to the Alt key). The basic commands are listed in Table 4.2. TABLE 4.2 Emacs Editing Commands Action Command Abort Ctrl+g Cursor left Ctrl+b Cursor down Ctrl+n Cursor right Ctrl+f Cursor up Ctrl+p Delete character Ctrl+d Delete line Ctrl+k Go to start of line Ctrl+a Go to end of line Ctrl+e Help Ctrl+h Quit Ctrl+x, Ctrl+c Save As Ctrl+x, Ctrl+w Save file Ctrl+x, Ctrl+s Search backward Ctrl+r Search forward Ctrl+s Start tutorial Ctrl+h, t Undo Ctrl+x, u Working with Permissions 99 TIP One of the best reasons to learn how to use emacs is that you can use nearly all the same keystrokes to edit commands on the bash shell command line. Another reason is that like vi, emacs is universally available on nearly every Unix and Linux system, including Apple's Mac OS X. Working with Permissions Under Linux (and Unix), everything in the file system, including directories and devices, is a file. And every file on your system has an accompanying set of permissions based on ownership. These permissions form the basis for security under Linux, and designate each file's read, write, and execute permission for you, members of your group, and all others on the system. 4 You can examine the default permissions for a file you create by using the umask command, or as a practical example, by using the touch command and then the ls command's long-format listing like this: $ touch file $ ls -l file -rw-r-r- 1 andrew andrew 0 Feb 1 20:54 file In this example, the touch command is used to quickly create a file. The ls command then reports on the file, displaying information (from left to right) in the first field of output (such as -rw-r-r- previously): . The type of file created-Common indicators of the type of file are a leading letter in the output. A blank (which is represented by a dash in the preceding example) designates a plain file, d designates a directory, c designates a character device (such as /dev/ttyS0), and b is used for a block device (such as /dev/sda). . Permissions-Read, write, and execute permissions for the owner, group, and all others on the system. (You learn more about these permissions later in this section.) . Number of links to the file-The number one (1) designates that there is only one file, whereas any other number indicates that there might be one or more hard-linked files. Links are created with the ln command. A hard-linked file is an exact copy of the file, but it might be located elsewhere on the system. Symbolic links of directories can also be created, but only the root operator can create a hard link of a directory. . The owner-The account that created or owns the file; you can change this designa- tion by using the chown command. . The group-The group of users allowed to access the file; you can change this desig- nation by using the chgrp command. . File size and creation/modification date-The last two elements indicate the size of the file in bytes and the date the file was created or last modified. CHAPTER 4 Command Line Quickstart 100 Assigning Permissions Under Linux, permissions are grouped by owner, group, and others, with read, write, and execute permission assigned to each, like so: Owner Group Others rwx rwx rxw Permissions can be indicated by mnemonic or octal characters. Mnemonic characters are . r indicates permission for an owner, member of the owner's group, or others to open and read the file. . w indicates permission for an owner, member of the owner's group, or others to open and write to the file. . x indicates permission for an owner, member of the owner's group, or others to exe- cute the file (or read a directory). In the previous example for the file named file, the owner, andrew, has read and write permission, as does any member of the group named andrew. All other users may only read the file. Also note that default permissions for files created by the root operator will be different because of umask settings assigned by the shell. Many users prefer to use numeric codes, based on octal (base 8) values, to represent permissions. Here's what these values mean: . 4 indicates read permission. . 2 indicates write permission. . 1 indicates execute permission. In octal notation, the previous example file has a permission setting of 664 (read + write or 4 + 2, read + write or 4 + 2, read-only or 4). Although you can use either form of permissions notation, octal is easy to use quickly after you visualize and understand how permissions are numbered. NOTE In Linux, you can create groups to assign a number of users access to common direc- tories and files, based on permissions. You might assign everyone in accounting to a group named accounting, for example, and allow that group access to accounts payable files while disallowing access by other departments. Defined groups are main- tained by the root operator, but you can use the newgrp command to temporarily join other groups to access files (as long as the root operator has added you to the other groups). You can also allow or deny other groups' access to your files by modifying the group permissions of your files. Working with Permissions 101 Directory Permissions Directories are also files under Linux. For example, again use the ls command to show permissions like this: $ mkdir foo $ ls -ld foo drwxrwxr-x 2 andrew andrew 4096 Jan 23 12:37 foo In this example, the mkdir command is used to create a directory. The ls command and its -ld option is used to show the permissions and other information about the directory (not its contents). Here you can see that the directory has permission values of 775 (read + write + execute or 4 + 2 + 1, read + write + execute or 4 + 2 + 1, and read + execute or 4 + 1). This shows that the owner and group members can read and write to the directory and, 4 because of execute permission, also list the directory's contents. All other users can only list the directory contents. Note that directories require execute permission for anyone to be able to view their contents. You should also notice that the ls command's output shows a leading d in the permis- sions field. This letter specifies that this file is a directory; normal files have a blank field in its place. Other files, such as those specifying a block or character device, have a differ- ent letter. For example, if you examine the device file for a Linux serial port, you will see $ ls -l /dev/ttyS0 crw-rw-- 1 root dialout 4, 64 Feb 1 19:49 /dev/ttyS0 Here, /dev/ttyS0 is a character device (such as a serial communications port and desig- nated by a c) owned by root and available to anyone in the dialout group. The device has permissions of 660 (read + write, read + write, no permission). On the other hand, if you examine the device file for an IDE hard drive, you see $ ls -l /dev/sda brw-rw-- 1 root disk 8, 0 Feb 1 19:49 /dev/sda In this example, b designates a block device (a device that transfers and caches data in blocks) with similar permissions. Other device entries you will run across on your Linux system include symbolic links, designated by s. You can use the chmod command to alter a file's permissions. This command uses various forms of command syntax, including octal or a mnemonic form (such as u, g, o, or a and rwx, and so on) to specify a desired change. The chmod command can be used to add, remove, or modify file or directory permissions to protect, hide, or open up access to a file by other users (except for root, which can access any file or directory on a Linux system). CHAPTER 4 Command Line Quickstart 102 The mnemonic forms of chmod's options (when used with a plus character, +, to add, or a minus sign, -, to take away) designate the following: . u-Adds or removes user (owner) read, write, or execute permission . g-Adds or removes group read, write, or execute permission . o-Adds or removes read, write, or execute permission for others not in a file's group . a-Adds or removes read, write, or execute permission for all users . r-Adds or removes read permission . w-Adds or removes write permission . x-Adds or removes execution permission For example, if you create a file, such as a readme.txt, the file will have default permis- sions (set by the umask setting in /etc/bashrc) of -rw-rw-r-- 1 andrew andrew 12 Jan 2 16:48 readme.txt As you can see, you and members of your group can read and write the file. Anyone else can only read the file (and only if it is outside your home directory, which will have read, write, and execute permission set only for you, the owner). You can remove all write permission for anyone by using chmod, the minus sign, and aw like so: $ chmod -aw readme.txt $ ls -l readme.txt -r--r--r-- 1 andrew andrew 12 Jan 2 16:48 readme.txt Now, no one can write to the file (except you, if the file is in your home or /tmp directory because of directory permissions). To restore read and write permission for only you as the owner, use the plus sign and the u and rw options like so: $ chmod u+rw readme.txt $ ls -l readme.txt -rw------- 1 andrew andrew 12 Jan 2 16:48 readme.txt You can also use the octal form of the chmod command, for example, to modify a file's permissions so that only you, the owner, can read and write a file. Use the chmod command and a file permission of 600, like this: $ chmod 600 readme.txt If you take away execution permission for a directory, files might be hidden inside and may not be listed or accessed by anyone else (except the root operator, of course, who has access to any file on your system). By using various combinations of permission settings, you can quickly and easily set up a more secure environment, even as a normal user in your home directory. Working with Permissions 103 Understanding Set User ID and Set Group ID Permissions Another type of permission is "set user ID", known as suid, and "set group ID" (sgid) permis- sions. These settings, when used in a program, enable any user running that program to have program owner or group owner permissions for that program. These settings enable the program to be run effectively by anyone, without requiring that each user's permissions be altered to include specific permissions for that program. One commonly used program with suid permissions is the passwd command: $ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 29104 Nov 6 19:16 /usr/bin/passwd This setting allows normal users to execute the command (as root) to make changes to a root-only accessible file, /etc/passwd. 4 You also can assign similar permission with the chfn command. This command allows users to update or change finger information in /etc/passwd. You accomplish this permission modification by using a leading 4 (or the mnemonic s) in front of the three octal values. NOTE Other files that might have suid or guid permissions include at, rcp, rlogin, rsh, chage, chsh, ssh, crontab, sudo, sendmail, ping, mount, and several Unix-to-Unix Copy (UUCP) utilities. Many programs (such as games) might also have this type of per- mission to access a sound device. Files or programs that have suid or guid permissions can sometimes present security holes because they bypass normal permissions. This problem is compounded if the permission extends to an executable binary (a command) with an inherent security flaw because it could lead to any system user or intruder gaining root access. In past exploits, this typi- cally happened when a user fed a vulnerable command with unexpected input (such as a long pathname or option); the command would fail, and the user would be presented a root prompt. Although Linux developers are constantly on the lookout for poor program- ming practices, new exploits are found all the time, and can crop up unexpectedly, espe- cially in newer software packages that haven't had the benefit of peer developer review. Savvy Linux system administrators keep the number of suid or guid files present on a system to a minimum. The find command can be used to display all such files on your system: # find / -type f -perm +6000 -exec ls -l {} \; CHAPTER 4 Command Line Quickstart 104 NOTE The find command is quite helpful and can be used for many purposes, such as before or during backup operations. See the section "Using Backup Software" in Chapter 13, "Backing Up." Note that the programs do not necessarily have to be removed from your system. If your users really do not need to use the program, you can remove the program's execute permission for anyone. You have to decide, as the root operator, whether your users are allowed to, for example, mount and unmount CD-ROMs or other media on your system. Although Linux-based operating systems can be set up to accommodate ease of use and convenience, allowing programs such as mount to be suid might not be the best security policy. Other candidates for suid permission change could include the chsh, at, or chage commands. Working as Root The root, or super-user account, is a special account and user on Unix and Linux systems. Super-user permissions are required in part because of the restrictive file permissions assigned to important system configuration files. You must have root permission to edit these files or to access or modify certain devices (such as hard drives). When logged in as root, you have total control over your system, which can be dangerous. When you work in root, you can destroy a running system with a simple invocation of the rm command like this: # rm -fr / This command line not only deletes files and directories, but also could wipe out file systems on other partitions and even remote computers. This alone is reason enough to take precautions when using root access. The only time you should run Linux as the super-user is when you are configuring the file system, for example, or to repair or maintain the system. Logging in and using Linux as the root operator isn't a good idea because it defeats the entire concept of file permissions. NOTE The next couple of paragraphs assume that you have enabled the root account, as described at the start of this chapter. Knowing how to run commands as root without logging in as root can help avoid serious missteps when configuring your system. Linux comes with a command named su that enables you to run one or more commands as root and then quickly returns you to normal user status. For example, if you would like to edit your system's file system table (a Working as Root 105 simple text file that describes local or remote storage devices, their type, and location), you can use the su command like this: $ su -c "nano -w /etc/fstab" Password: After you press Enter, you are prompted for a password that gives you access to root. This extra step can also help you "think before you leap" into the command. Enter the root password, and you are then editing /etc/fstab, using the nano editor with line wrapping disabled. CAUTION Before editing any important system or software service configuration file, make a backup copy. Then make sure to launch your text editor with line wrapping disabled. If you edit a configuration file without disabling line wrapping, you could insert spurious 4 carriage returns and line feeds into its contents, causing the configured service to fail when restarting. By convention, nearly all configuration files are formatted for 80-char- acter text width, but this is not always the case. By default, the vi and emacs editors don't use line wrap. You can use sudo in the same way to allow you to execute one-off commands. The above example would look like this, using sudo: $ sudo nano -w /etc/fstab Creating Users When a Linux system administrator creates a user, an entry in /etc/passwd for the user is created. The system also creates a directory, labeled with the user's username, in the /home directory. For example, if you create a user named bernice, the user's home directory is /home/bernice. NOTE In this chapter, you learn how to manage users from the command line. See Chapter 10, "Managing Users," for more information on user administration with Ubuntu using graphical administration utilities, such as the graphical users-admin client. Use the useradd command, along with a user's name, to quickly create a user: $ sudo useradd andrew After creating the user, you must also create the user's initial password with the passwd command: $ sudo passwd andrew 106 CHAPTER 4 Command Line Quickstart Changing password for user andrew. New password: Retype new password: passwd: all authentication tokens updated successfully. Enter the new password twice. If you do not create an initial password for a new user, the user cannot log in. You can view useradd's default new user settings by using the command and its -D option, like this: $ useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel These options display the default group ID, home directory, account and password policy (active forever with no password expiration), the default shell, and the directory contain- ing defaults for the shell. The useradd command has many different command-line options. The command can be used to set policies and dates for the new user's password, assign a login shell, assign group membership, and other aspects of a user's account. Deleting Users Use the userdel command to delete users from your system. This command removes a user's entry in the system's /etc/passwd file. You should also use the command's -r option to remove all the user's files and directories (such as the user's mail spool file under /var/spool/mail): $ sudo userdel -r andrew If you do not use the -r option, you have to manually delete the user's directory under /home, along with the user's /var/spool/mail queue. Shutting Down the System Use the shutdown command to shut down your system. The shutdown command has a number of different command-line options (such as shutting down at a predetermined time), but the fastest way to cleanly shut down Linux is to use the -h or halt option, followed by the word now or the numeral zero (0), like this: $ sudo shutdown -h now or Working as Root 107 $ sudo shutdown -h 0 To incorporate a timed shutdown and a pertinent message to all active users, use shutdown's time and message options, like so: $ sudo shutdown -h 18:30 "System is going down for maintenance this evening" This example shuts down your system and provides a warning to all active users 15 minutes before the shutdown (or reboot). Shutting down a running server can be consid- ered drastic, especially if there are active users or exchanges of important data occurring (such as a backup in progress). One good approach is to warn users ahead of time. This can be done by editing the system Message of the Day (MOTD) motd file, which displays a message to users after login. To create your custom MOTD, use a text editor and change the contents of /etc/motd. You can also make downtimes part of a regular schedule, perhaps to coincide with security audits, software updates, or hardware maintenance. 4 You should shut down Ubuntu for only a few very specific reasons: . You are not using the computer and want to conserve electrical power. . You need to perform system maintenance that requires any or all system services to be stopped. . You want to replace integral hardware. TIP Do not shut down your computer if you suspect that one or more intruders has infiltrat- ed your system; instead, disconnect the machine from any or all networks and make a backup copy of your hard drives. You might want to also keep the machine running to examine the contents of memory and to examine system logs. Rebooting the System You should also use the shutdown command to reboot your system. The fastest way to cleanly reboot Linux is to use the -r option, and the word now or the numeral zero (0): $ sudo shutdown -r now or $ sudo shutdown -r 0 Both rebooting and shutting down can have dire consequences if performed at the wrong time (such as during backups or critical file transfers, which arouses the ire of your system's users). However, Linux-based operating systems are designed to properly stop active system services in an orderly fashion. Other commands you can use to shut down and reboot Linux are the halt and reboot commands, but the shutdown command is more flexible. 108 CHAPTER 4 Command Line Quickstart Reading Documentation Although you learn the basics of using Ubuntu in this book, you need time and practice to master and troubleshoot more complex aspects of the Linux operating system and your distribution. As with any operating system, you can expect to encounter some problems or perplexing questions as you continue to work with Linux. The first place to turn for help with these issues is the documentation included with your system; if you cannot find the information you need there, check Ubuntu's website. Linux, like Unix, is a self-documenting system, with man pages accessible through the man command. Linux offers many other helpful commands for accessing its documentation. You can use the apropos command-for example, with a keyword such as partition-to find commands related to partitioning, like this: $ apropos partition diskdumpfmt (8) - format a dump device or a partition fdisk (8) - Partition table manipulator for Linux GNU Parted [parted] (8) - a partition manipulation program mpartition (1) - partition an MSDOS hard disk MPI_Cart_sub (3) - Partitions a communicator into subgroups which form lower-dimensional cartesian subgrids partprobe (8) - inform the OS of partition table changes pvcreate (8) - initialize a disk or partition for use by LVM sfdisk (8) - Partition table manipulator for Linux To find a command and its documentation, you can use the whereis command. For example, if you are looking for the fdisk command, you can do this: $ whereis fdisk fdisk: /sbin/fdisk /usr/share/man/man8/fdisk.8.gz Using Man Pages To learn more about a command or program, use the man command, followed by the name of the command. Man pages for Linux and X Window commands are within the /usr/share/man, /usr/local/share/man, and /usr/X11R6/man directories; so, for example, to read the rm command's man page, use the man command like this: $ man rm After you press Enter, the less command (a Linux command known as a pager) displays the man page. The less command is a text browser you can use to scroll forward and backward (even sideways) through the document to learn more about the command. Type the letter h to get help, use the forward slash to enter a search string, or press q to quit. Reading Documentation 109 NOTE Although nearly all the hundreds of GNU commands included with Linux each have a man page, you must use the info command to read detailed information about using a GNU command. For example, to learn even more about bash (which has a rather exten- sive manual page), use the info command like this: $ info bash Press the n and p keys to navigate through the document, or scroll down to a menu item on the screen and press Enter to read about a specific feature. Press q to quit reading. Related Ubuntu and Linux Commands 4 The following programs and built-in shell commands are commonly used when working at the command line. These commands are organized by category to help you under- stand the command's purpose. If you need to find full information for using the command, you can find that information under the command's man page. . Managing users and groups-chage, chfn, chsh, edquota, gpasswd, groupadd, groupdel, groupmod, groups, mkpasswd, newgrp, newusers, passwd, umask, useradd, userdel, usermod . Managing files and file systems-cat, cd, chattr, chmod, chown, compress, cp, dd, fdisk, find, gzip, ln, mkdir, mksfs, mount, mv, rm, rmdir, rpm, sort, swapon, swapoff, tar, touch, umount, uncompress, uniq, unzip, zip . Managing running programs-bg, fg, kill, killall, nice, ps, pstree, renice, top, watch . Getting information-apropos, cal, cat, cmp, date, diff, df, dir, dmesg, du, env, file, free, grep, head, info, last, less, locate, ls, lsattr, man, more, pinfo, ps, pwd, stat, strings, tac, tail, top, uname, uptime, vdir, vmstat, w, wc, whatis, whereis, which, who, whoami . Console text editors-ed, jed, joe, mcedit, nano, red, sed, vim . Console Internet and network commands-bing, elm, ftp, host, hostname, ifcon- fig, links, lynx, mail, mutt, ncftp, netconfig, netstat, pine, ping, pump, rdate, route, scp, sftp, ssh, tcpdump, traceroute, whois, wire-test CHAPTER 4 Command Line Quickstart 110 Reference . http://www.winntmag.com/Articles/Index.cfm?ArticleID=7420-An article by a Windows NT user who, when experimenting with Linux, blithely confesses to rebooting the system after not knowing how to read a text file at the Linux console. . http://standards.ieee.org/regauth/posix/-IEEE's POSIX information page. . http://www.itworld.com/Comp/2362/lw-01-government/#sidebar-Discussion of Linux and POSIX compliance. . http://www.pathname.com/fhs/-Home page for the Linux FHS, Linux Filesystem Hierarchy Standard. . http://www.tldp.org/-Browse the HOWTO section to find and read The Linux Keyboard and Console HOWTO-Andries Brouwer's somewhat dated but eminently useful guide to using the Linux keyboard and console. . http://www.gnu.org/software/emacs/emacs.html-Home page for the FSF's GNU emacs editing environment; you can find additional documentation and links to the source code for the latest version here. . http://www.vim.org/-Home page for the vim (vi clone) editor included with Linux distributions. Check here for updates, bug fixes, and news about this editor. . http://www.courtesan.com/sudo/-Home page for the sudo command. Check here for the latest updates, security features, and bug fixes. PART II Desktop Ubuntu IN THIS PART On the Internet CHAPTER 5 Productivity Applications CHAPTER 6 Multimedia Applications CHAPTER 7 Printing with Ubuntu CHAPTER 8 Games CHAPTER 9 This page intentionally left blank 5 CHAPTER IN THIS CHAPTER . Getting Started with Firefox On the Internet . Choosing an Email Client . RSS Readers . Instant Messaging with Pidgin . Internet Relay Chat . Usenet Network Newsgroups In the modern world, the Internet is everywhere. From cell . The Pan News Client phones to offices, from games consoles to iPods, we are Newsreader surrounded by multiple access routes to online information . Videoconferencing with Ekiga and communication. Ubuntu is no outsider when it comes . Reference to accessing information through the Internet and comes equipped with web browsers, email clients and other tools that you can use to connect to other people across the globe. In this chapter we'll take a look at some of the popular Internet applications that are available with Ubuntu. You'll find out about Firefox, and its KDE alternative, Konqueror. We'll also investigate some of the email clients that you can install whilst using Ubuntu. Other topics include RSS feed readers, Instant Messaging (through IRC and other networks) and reading newsgroups. Finally we'll take a quick look at Ekiga, which is a videoconferencing program for Ubuntu. A Brief Introduction to the Internet The Internet itself was first brought to life by the U.S. Department of Defense in 1969. It was called ARPANet after the Department of Defense's Advanced Research Projects Agency. Designed to build a network that would withstand major catastrophe (this was the peak of the Cold War), it soon grew to encompass more and more networks to build the Internet. Then, in 1991, Tim Berners-Lee of CERN developed the idea of the World Wide Web, including Hypertext Transfer Protocol (HTTP) and Hypertext Markup Language (HTML). This gave us what we now know to be the Internet. CHAPTER 5 On the Internet 114 Getting Started with Firefox One of the most popular web browsers, and in fact the default web browser in Ubuntu, is Mozilla Firefox (see Figure 5.1). Built on a solid code base that is derived from the Mozilla Suite, Firefox offers an alternative to surfing the Internet using Internet Explorer. There have been more than 265 million downloads of Firefox since its release in late 2004, and it has grabbed significant market share from Internet Explorer. FIGURE 5.1 Mozilla Firefox-rediscover the Web. Firefox enables you to add on numerous upgrades, further enhancing your experience. In Ubuntu you can find Firefox under the Applications, Internet menu at the top of your screen. An even simpler way to start Firefox is to click the small Firefox icon next to the System menu. Either way, Firefox opens. Beyond the basic program is a wealth of plug-ins and extensions that can increase the capabilities of Firefox beyond simple web browsing. Plug-ins such as Shockwave Flash and Java are available instantly, as are multimedia codecs for viewing video content, whereas extensions provide useful additions to the browsing experience. For example, ForecastFox is an extension that gives you your local weather conditions, and Bandwidth Tester is a tool that calculates your current bandwidth. As Firefox grows, there will be more and more extensions and plug-ins that you can use to enhance your browsing pleasure. Choosing an Email Client 115 NOTE Ubuntu allows access to Firefox 3, but only as a preview. You can download it using synaptic if you're curious. Finding and obtaining these plugins and extensions is made very easy as Mozilla develop- ers have helpfully created a site dedicated to helping you get more from Firefox. Particular favorites are the Adblock Plus and the StumbleUpon plugins. Adblock Plus allows you to nuke all those annoying banners and animations that take up so much bandwidth while you are browsing. StumbleUpon is a neat plugin that takes you to web pages based on your preferences. Be warned, though, that StumbleUpon can be quite addictive and you will end up wasting away many hours clicking the stumble button! Flash You can easily enable Flash in your browser by installing the flashplugin-nonfree package either by using synaptic or by using apt-get. Either way, Ubuntu will down- load this package, which will in turn retrieve the official package from Adobe and then 5 install it on your system. A browser restart is required before you try to access any Flash-enabled content. Another plugin that we make a lot of use of is Google BrowserSync. If, like us, you work across multiple computers then you will no doubt have had to re-create bookmarks at every different computer and try to keep them the same. Google makes this whole process much easier by allowing you to synchronize not only your bookmarks, but also your cookies, browser history and finally any saved passwords across multiple browsers. Bear in mind that you can choose what you want to synchronize, making it easy just to replicate your bookmarks. Konqueror KDE users have the option to use Konqueror, which is the default browser for KDE (see Figure 5.2). As well as handling file system navigation, Konqueror can also be used to surf the web. It, too, is based on the Gecko rendering engine as found in Firefox. Choosing an Email Client Back in the days of Unix, there were various text-based email clients such as elm and pine (Pine Is Not Elm). Although they looked basic, they allowed the average user to interact with his email, both for composing and reading correspondence. With the advent of mainstream computing and the realization that people needed friendly GUI interfaces to be productive came a plethora of email clients, with some of them being cross-platform and compatible among Linux, Windows, and Mac OS X, not to mention Unix. CHAPTER 5 On the Internet 116 FIGURE 5.2 Konqueror, the standard KDE web browser. Evolution Evolution is the standard email client that comes with Ubuntu, and to call it an email client would be to sincerely underestimate its usefulness as an application. Not only does it handle email, but it can also look after contacts and calendaring, as well as managing your tasks (see Figure 5.3). The next section demonstrates how to configure Evolution to handle email. FIGURE 5.3 With Evolution you can handle all your email and contacts, as well as make appointments and track tasks. Choosing an Email Client 117 You need to have the following information to successfully configure Evolution: . Your email address . Your incoming email server name and type (that is, pop.email.com, POP, and IMAP) . Your username and password for the incoming server . Your outgoing email server name (that is, smtp.email.com) After you have all the information, you can start Evolution. The first screen you are presented with is the Account Setup Assistance screen, so click Next to get to the Identity screen (see Figure 5.4). 5 FIGURE 5.4 You can launch and configure Evolution with just a few simple commands. The Identity screen, the first of several screens, asks you to enter your information. Click Forward to proceed. The next screen permits you to configure Evolution to use your Mail Transfer Agent. You can choose POP, IMAP, the local spools found in /var/mail in either mbox or maildir format, a local MTA, or None if you simply want to use the other features of Evolution. As shown in Figure 5.5, you can also set your password. CHAPTER 5 On the Internet 118 FIGURE 5.5 The Receiving Email screen requires information from your ISP or system admin- istrator. You must also choose between SMTP or Sendmail for sending your mail, so enter the rele- vant details as required. If you have chosen an IMAP-based email account then you'll be asked some more questions to govern how often Evolution checks for email. Finally, you will see the opening Evolution window, shown in Figure 5.6. Each icon in the left pane of the main Evolution window opens a different window when selected. Each view has options that can be configured to suit your needs; you'll find access to the preferences dialog box (shown in Figure 5.7) which can be found under the Edit menu. Mozilla Thunderbird Mozilla Thunderbird (see Figure 5.8) is the sister program to Firefox. Whereas Firefox is designed to browse the web, Thunderbird's specialty is communication. It can handle email, network news (see later in this chapter), and RSS feeds. Thunderbird is not installed by default with Ubuntu, so you will have to use either apt- get or synaptic to install it. As with Firefox, there are many plug-ins and extensions to enhance your email and newsreading. Choosing an Email Client 119 FIGURE 5.6 The standard Evolution display. On the left you can see buttons to choose Mail, 5 Contacts, Calendars, Memos, and Tasks windows. FIGURE 5.7 The calendar application Tools screen is where the information can be shared with others. Here, the times and dates can be configured. CHAPTER 5 On the Internet 120 FIGURE 5.8 The natural companion to Firefox, Mozilla's lightweight email client, Thunderbird, can be found in use all over the world. KMail If you are using the KDE Desktop Environment rather than the Ubuntu default GNOME desktop, you will also have KMail installed. As with Balsa, it will not take users of Outlook Express or Mozilla Mail very long to get used to the KMail interface. Some useful features found in KMail are the choice of mbox or maildir formats, improved filter creation, the capability to sort mail into threads, and the capability to apply filters at the MTA. Figure 5.9 shows the KMail email program. KMail offers IMAP access, extensive filtering, mbox and maildir formats, and the capability to easily integrate MTAs such as Procmail, Spamassassin, or custom processing scripts. Other Mail Clients The mail clients that we've covered are only a few of those available. Claws Mail is very popular because it offers spell-checking while typing and is well suited for use in large network environments in which network overhead and RAM usage are important consid- erations. You can see a screenshot of Claws mail in Figure 5.10. RSS Readers RSS is one of the protocols of Web 2.0, the next generation of Internet content. Although RSS has been in use for a couple of years now, it has only recently started to really take off, thanks to adoption across a large number of websites and portals. RSS Readers 121 FIGURE 5.9 The KMail email client, part of the KDE Desktop Environment. 5 FIGURE 5.10 Claws Mail gives you a very resource-light, yet very powerful and fast mail client. The key advantage of RSS is that you can quickly read news from your specific choice of websites at a time that suits you. Some services offer just the articles' headlines, whereas others offer full articles for you to view. RSS feeds can be accessed in various ways, even through your web browser! CHAPTER 5 On the Internet 122 Firefox Firefox implements RSS feeds as what it calls Live Bookmarks (shown in Figure 5.11), which are essentially bookmarks with sub-bookmarks, each linking to a new page from your chosen website. I like to have several news sites grouped together under a folder on my toolbar called News, allowing me to quickly browse through my collection of sites and pick out articles that really interest me. FIGURE 5.11 Live Bookmarks for Firefox, making all your news fixes just a mouse click away. Liferea Of course, not everyone wants to read RSS feeds with the browser. The main problem with reading RSS feeds with Firefox is that you get to see only the headline, rather than any actual text. This is where a dedicated RSS reader comes in handy, and Liferea (see Figure 5.12) is one of the best. It is not installed by default, so you have to retrieve it by going to Applications, Add/Remove. After it is installed, you can find it under the Applications, Internet menu labeled simply Liferea. By default, Liferea offers a number of RSS feeds, including Planet Debian, Groklaw, and Slashdot. Adding a new feed is very straightforward. All you need to do is select New Subscription under the Feeds menu and paste the URL of the RSS feed into the box. Liferea then retrieves all the current items available through that field, and displays the feed name on the left side for you to select and start reading. Instant Messaging with Pidgin 123 5 FIGURE 5.12 Read your daily news feeds with Liferea, a fantastic and easy-to-use RSS feed reader. Instant Messaging with Pidgin Instant Messaging is one of the biggest ways for people to interact over the web. AOL was the primary force behind this, especially in America, but other networks and systems soon came onto the market providing users with a wealth of choice. No longer just a consumer tool, instant messaging is now a part of the corporate world, with many different companies deploying internal instant messaging software for collaboration. Pidgin was created as a multi-protocol instant messaging client enabling you to connect to several different networks that use differing protocols, such as AIM, MSN, Jabber and others. You can find Pidgin under Applications, Internet, listed as Pidgin Internet Messenger; it is shown in Figure 5.13. CHAPTER 5 On the Internet 124 FIGURE 5.13 Pidgin is the Swiss army knife of instant messaging applications; it can work across many different IM networks. Getting started with Pidgin is simple; when you start Pidgin you are asked to add a new account, as shown in Figure 5.14. Internet Relay Chat As documented in RFC 2812 and RFC 2813, the IRC protocol is used for text conferencing. Like mail and news, IRC uses a client/server model. Although it is rare for an individual to establish an IRC server, it can be done. Most people use public IRC servers and access them with IRC clients. Ubuntu provides a number of graphical IRC clients, including X-Chat, licq, and Seamonkeychat, but there is no default chat client for Ubuntu. Ubuntu also provides the console clients epic and licq for those who eschew X. If you don't already have a favorite, you should try them all. CAUTION You should never use an IRC client while you are the root user. It is better to create a special user just for IRC because of potential security problems. To use X-Chat in this manner, you open a terminal window, use su to change to your IRC user, and start the xchat client. X-Chat is a popular IRC client, and it is the client that is used in this chapter's example. The HTML documents for X-Chat are available in /usr/share/docs/xchat. It is a good idea to read them before you begin because they include an introduction to and cover some of the basics of IRC. You need to download and install X-Chat to launch the X-Chat Internet Relay Chat 125 5 FIGURE 5.14 Pidgin makes light work of setting up your instant messenger accounts. You select the network protocol for the account (that is, AIM, MSN, and so on) and fill out your screen name and password, finally clicking Save to create the account within Pidgin and auto- matically log in. If any of your contacts are online, then they will appear in the buddy list window as shown earlier in Figure 5.13. client, select the XChat IRC item from the Applications, Internet menu, or you can launch it from the command line, like this: $ xchat & The X-Chat application enables you to assign yourself up to three nicknames. You can also specify your real name and your username. Because many people choose not to use their real names in IRC chat, you are free to enter any names you desire in any of the spaces provided. You can select multiple nicknames; you might be banned from an IRC channel under one name, and you could then rejoin using another. If this seems slightly juvenile to you, you are beginning to get an idea of the type of behavior on many IRC channels. When you open the main X-Chat screen, a list of IRC servers appears, as shown in Figure 5.15. After you choose a server by double-clicking it, you can view a list of channels avail- able on that server by choosing Window, Channel List. The X-Chat Channel List window appears. In that window, you can choose to join channels featuring topics that interest you. To join a channel, you double-click it. CHAPTER 5 On the Internet 126 FIGURE 5.15 The main X-Chat screen presents a list of available public servers from which to select. The Wild Side of IRC Do not be surprised at the number of lewd topics and the use of crude language on public IRC servers. For a humorous look at the topic of IRC cursing, see http://www.irc. org/fun_docs/nocuss.html. This site also offers some tips for maintaining IRC etiquette, which is essential if you do not want to be the object of any of that profanity! Here are some of the most important IRC etiquette rules: . Do not use colored text, all-capitalized text, blinking text, or "bells" (beeps caused by sending ^G to a terminal). . Show respect for others. . Ignore people who act inappropriately. After you select a channel, you can join in the conversation, which appears as onscreen text. The messages scroll down the screen as new messages appear. For an example, see Figure 5.16. TIP You can establish your own IRC server even though Ubuntu does not provide one. Setting up a server is not a task for anyone who is not well versed in Linux or IRC. Usenet Network Newsgroups 127 5 FIGURE 5.16 Join in an online chatroom about your favorite distro, with X-Chat. A popular server is IRCd, which you can obtain from ftp://ftp.irc.org/irc/server/. Before you download IRCd, you should look at the README file to determine what files you need to download and read the information at http://www.irchelp.org/irchelp/ircd/. Usenet Network Newsgroups The concept of newsgroups revolutionized the way information was exchanged between people across a network. The Usenet network news system created a method for people to electronically communicate with large groups of people with similar interests. As you will see, many of the concepts of Usenet news are embodied in other forms of collaborative communication. Usenet newsgroups act as a form of public bulletin board system. Any user can subscribe to individual newsgroups and send (or post) messages (called articles) to the newsgroup so that all the other subscribers of the newsgroup can read them. Some newsgroups include an administrator, who must approve each message before it is posted. These are called moderated newsgroups. Other newsgroups are open, allowing any subscribed member to post a message. When an article is posted to the newsgroup, it is transferred to all the other hosts in the news network. Usenet newsgroups are divided into a hierarchy to make it easier to find individual news- groups. The hierarchy levels are based on topics, such as computers, science, recreation, CHAPTER 5 On the Internet 128 and social issues. Each newsgroup is named as a subset of the higher-level topic. For example, the newsgroup comp relates to all computer topics. The newsgroup comp.laptops relates to laptop computer issues. Often the hierarchy goes several layers deep. For example, the newsgroup comp.databases.oracle.server relates to Oracle server database issues. NOTE The format of newsgroup articles follows the strict guidelines defined in the Internet standards document Request for Comments (RFC) 1036. Each article must contain two distinct parts: header lines and a message body. The header lines identify information about when and by whom the article was posted. The body of the message should contain only standard ASCII text characters. No binary characters or files should be posted within news articles. To get around this restriction, binary files are converted to text data, through use of either the standard Unix uuen- code program or the newer Multipurpose Internet Mail Extensions (MIME) protocol. The resulting text file is then posted to the newsgroup. Newsgroup readers can then decode the posted text file back into its original binary form. A collection of articles posted in response to a common topic is called a thread. A thread can contain many articles as users post messages in response to other posted messages. Some newsreader programs allow the user to track articles based on the threads to which they belong. This helps simplify the organization of articles in the newsgroup. TIP The free news server news.gmane.org makes the Red Hat and Ubuntu mail lists avail- able via newsgroups. The beta list is available as gmane.linux.redhat.rhl.beta. It is a handy way to read threaded discussions and easier than using the Ubuntu mail list archives. The protocol used to transfer newsgroup articles from one host to another is Network News Transfer Protocol (NNTP), defined in RFC 975. (You can search RFCs at ftp://metalab.unc.edu/pub/docs/rfc/; look at the file rfc-index.txt.) NNTP was designed as a simple client/server protocol that enables two hosts to exchange newsgroup articles in an efficient manner. The Pan News Client Newsreader Whether or not your Ubuntu server is set up as a news server, you can use a newsreader program to read newsgroup articles. The newsreader programs require just a connection to a news server. It does not matter whether the news server is on the same machine or is a remote news server on the other side of the world. The Pan News Client Newsreader 129 Several programs are available for Unix systems to connect to news servers to read and post articles in newsgroups. Here we'll discuss the Pan news client. Pan is a graphical newsreader client that works with GNOME and is the default news- reader for Ubuntu. If you have the GNOME libraries installed (and they usually are installed by default), you can also use Pan with the K Desktop Environment (KDE). Pan has the capability to download and display all the newsgroups and display posted news articles. You can launch it by using the GNOME or KDE desktop panel or from the command line of an X terminal window with the command pan &. Pan supports combin- ing multipart messages and the yenc encoding/decoding protocol. Figure 5.17 shows a sample Pan display. 5 FIGURE 5.17 The Pan graphical newsreader is one of the nicest available for Linux, shown here displaying an image attached to a news article. The first time you run Pan, a configuration wizard appears and prompts you for your news server name (also known as the NNTP name), connection port details, as well as optional username and password for that server. You are also able to set expiration options and prioritize a server over others. After the wizard is finished, you are prompted to download a list of the newsgroups the server provides; this might take a while. If you need to change CHAPTER 5 On the Internet 130 the news server or add an additional server, you can access the Preferences item under the Edit menu to bring up the list of servers, which is shown in Figure 5.18. Then, you high- light the appropriate one and click Edit to change it or just click the New button to add a new news server. FIGURE 5.18 The Pan news server configuration window. Videoconferencing with Ekiga Ekiga is an Internet videoconferencing application that provides two-way voice and picture transmission over the Internet by using the H.323 protocol for IP telephony (also known as Voice over IP [VoIP]). It is an application similar to Microsoft NetMeeting and is provided with Ubuntu as the default videoconferencing client. Before you can take full advantage of the phone and videoconferencing capabilities of Ekiga, you must configure a full-duplex-capable sound card and video device (see Chapter 7, "Multimedia Applications") as well as a camera. Ekiga is found in the Internet menu as Videoconferencing; you click on the icon to launch it. When you start the Ekiga application for the first time, a configuration wizard runs and you are greeted by the first of four configuration screens. You simply enter your name, email address, and location and select your connection type. The settings for your audio and video devices are automatically detected; you can view them by selecting the Preferences item from the Edit menu. Figure 5.19 shows Ekiga in action, ready to dial another user. Videoconferencing with Ekiga 131 5 FIGURE 5.19 Ekiga is surprisingly simple to use. A video source is not necessary; a static picture can be used as well. When you have Ekiga running, you must register (from within Ekiga) with the server at http://ekiga.net/ to enable conferencing; Ekiga does this automatically for you if you told it to do so during the initial configuration. You can find an informative FAQ at the Ekiga home page at http://www.Ekiga.org/ that you should read in full before using Ekiga. Also, an excellent article about VoIP is at http:/ /freshmeat.net/articles/view/430/. NOTE If you frequently use VoIP applications such as Ekiga, you will tire of repetitively typing in long IP addresses to make connections. To avoid this hassle, you can use a "gate- keeper"-similar in purpose to a DNS server-to translate names into IP addresses. OpenH323 Gatekeeper is one such popular gatekeeper application. It is not provided with Ubuntu, but you can obtain it from http://www.gnugk.org/. CHAPTER 5 On the Internet 132 Reference . http://www.novell.com/-The home of Ximian Evolution, the standard email client for Ubuntu. . http://www.mozilla.com/-The home page for Mozilla Firefox, Thunderbird, and the Mozilla Suite. . http://www.spreadfirefox.com/-The Firefox advocacy home page is useful for converting those Internet Explorer types. . http://www.konqueror.org/-The homepage for Konqueror. . http://www.claws-mail.org/- The homepage for Claws, the email client. . http://ekiga.net/-Sign up here for a free SIP account for use with Ekiga. 6 CHAPTER IN THIS CHAPTER . Introducing OpenOffice.org Productivity . Office Suites for Ubuntu Applications . Productivity Applications Written for Microsoft Windows . Reference With the rapid growth of open source software, busi- nesses have directly benefited from specific developments in office productivity suites. Many businesses already use OpenOffice.org and its commercial counterpart, StarOffice, and they are already enjoying the cost benefits of not having to pay license fees or support costs. Of course, more suites are available than just OpenOffice.org and in this chapter we will explore the options available to you as a user of Ubuntu. NOTE It's important to understand that OpenOffice.org is not 100% compatible with Microsoft Office. Why is this? Well, Microsoft is notoriously secretive about its propri- etary file formats and the only way that OpenOffice.org could ensure compatibility would be to reverse-engi- neer each file format, an exercise akin to taking apart a telephone to see how it works. This reverse-engi- neering could be classed as illegal under U.S. law, which would make OpenOffice.org somewhat of a potential hot-potato if they chose this path. However, OpenOffice.org manages to maintain a very high stan- dard of importing and exporting so you should not experience too many problems. A productivity suite could be classed as containing two or more applications that could be used for creating docu- ments, presentations, spreadsheets, and databases. Other applications could include email clients, calculators/formula editors, and even illustration packages. Commonly they are CHAPTER 6 Productivity Applications 134 all tied together by a default look and feel, which makes sticking to one particular suite much easier. Because Ubuntu uses OpenOffice.org as its standard office suite, we will introduce you to Writer and Calc, the two most popular OpenOffice.org components. We will also take a brief look at some of the other Linux-based office suites that are available. Working with OpenOffice.org For the majority of users of productivity suites, OpenOffice.org should fulfill most, if not all, of your requirements. However, the first hurdle you need to get over is not whether it can do what you require of it, but rather whether it can successfully import and export to proprietary Microsoft formats at a standard that is acceptable to your needs. In the main, OpenOffice.org should import and export with minimal hassle, perhaps getting a bit stuck with some of the more esoteric Microsoft Office formatting. Given that most users do not go much beyond tabs, columns, and tables, this level of compatibility should suffice. However, you are strongly advised to round up a selection of documents and spread- sheets that could potentially fall foul of the import/export filter and test them thor- oughly (of course, keeping a backup of the originals!). There is nothing worse than for a system administrator who has deployed a new productivity suite than to suddenly get users complaining that they cannot read their files. This would quickly destroy any benefits felt from the other useful functions within OpenOffice.org, and could even spell the return of proprietary formats and expensive office suites. Many users do not mind switching to OpenOffice.org, largely because the user interface closely resembles that of similar Microsoft applications. This helps to settle users into their environment and should dispel any fears they have over switching. Such similarity makes the transition to OpenOffice.org a lot easier. Of course, just looking similar to Microsoft applications is not the only direct benefit. OpenOffice.org supports a huge array of file formats, and is capable of exporting to nearly 70 different types of documents. Such a wide variety of file formats means that you should be able to successfully use OpenOffice.org in nearly any environment. Introducing OpenOffice.org OpenOffice.org contains a number of productivity applications for use in creating text documents, preparing spreadsheets, organizing presentations, managing projects, and more. The following components of the OpenOffice.org package are included with Ubuntu: . Writer-This word processing program enables you to compose, format, and orga- nize text documents. If you are accustomed to using Microsoft Word, the functional- ity of OpenOffice.org Writer will be familiar to you. You will learn how to get up and running with Writer later on in this chapter. . Calc-This spreadsheet program enables you to manipulate numbers in a spread- sheet format. Support for all but the most esoteric Microsoft Excel functions means Introducing OpenOffice.org 135 that trading spreadsheets with Excel users should be successful. Calc offers some limited compatibility with Excel macros, but those macros generally have to be rewritten. We walk through setting up a basic spreadsheet with some formulas as well as showing you how to build a basic Data Pilot later on in this chapter. . Impress-This presentation program is similar to Microsoft PowerPoint and enables you to create slide show presentations that include graphs, diagrams, and other graphics. Impress also works well with PowerPoint files. NOTE The following five applications are not included by default with Ubuntu. You will need to use synaptic to retrieve them if required. . Math-This math formula editor enables you to write mathematical formulas with a number of math fonts and symbols for inclusion in a word processing document. Such symbols are highly specialized and not easily included in the basic functional- ity of a word processor. This is of interest primarily to math and science writers, but Math can be useful to anyone who needs to include a complex formula in text. . Base-This database was introduced with the OpenOffice.org 2.0 suite, which is provided with Ubuntu. It provides a fully functional database application. 6 . Draw-This graphics application allows you to create images for inclusion in the documents produced with OpenOffice.org. It saves files only in OpenOffice.org format, but it can import most common image formats. . Dia-This technical drawing editor from the GNOME Office suite enables you to create measured drawings, such as those used by architects and engineers. Its func- tionality is similar to that of Microsoft Visio. . Planner-You can use this project management application for project planning, scheduling, and tracking; this application is similar to, but not compatible with, Microsoft Project. It is found in the Office menu as the Project Planner item. A Brief History of OpenOffice.org The OpenOffice.org office suite is based on a commercial suite called StarOffice. Originally developed by a German company, StarOffice was purchased by Sun Microsystems in the United States. One of the biggest complaints about the old StarOffice was that all the component applications were integrated under a StarOffice "desktop" that looked very much like a Microsoft Windows desktop, including a Start button and menus. This meant that to edit a simple document, unneeded applications had to be loaded, making the office suite slow to load, slow to run, and quite demand- ing on system resources. CHAPTER 6 Productivity Applications 136 After the purchase of StarOffice, Sun Microsystems released a large part of the StarOffice code under the GNU Public License, and development began on what has become OpenOffice.org, which is freely available under the GPL. Sun continued devel- opment on StarOffice and released a commercial version as StarOffice 6.0. The signifi- cant differences between the free and commercial versions of the software are that StarOffice provides more fonts and even more import/export file filters than OpenOffice.org (these filters cannot be provided in the GPL version because of licens- ing restrictions) and StarOffice provides its own relational database, Software AG's Adabas D database. The StarOffice counterpart to OpenOffice.org 2.4 is StarOffice 8. Configuring OpenOffice.org The installation of OpenOffice.org is done on a systemwide basis, meaning that all users have access to it. However, individual users have to go into OpenOffice.org to configure it for their individual needs. This initial configuration happens transparently the first time you load any of the OpenOffice.org components, and might mean the application takes a little longer to load as a result. Be patient, and your desired application will appear. TIP OpenOffice.org is constantly improving its productivity applications. You can check the OpenOffice.org website (http://www.openoffice.org/) for the latest version. The web- site provides a link to download the source or a pre-compiled version of the most cur- rent working installation files. A more current version might offer file format support that you need. Should you need a Windows-compatible version, you will also find it at the website. Shown in Figure 6.1 is the Office menu, which is found under Applications. You can see the entries for Database (Base), Presentation (Impress), Spreadsheet (Calc), and Word Processor (Writer). FIGURE 6.1 The OpenOffice.org suite provided by Ubuntu is simple to configure and use. Introducing OpenOffice.org 137 As is the case with many Linux applications, you may be somewhat overwhelmed by the sheer number of configuration options available to you in OpenOffice.org. Mercifully, a lot of thought has gone into organizing these options, which are available if you click the Tools menu and select Options. It does not matter which program you use to get to this dialog box; it appears the same if summoned from Writer, Impress, or Calc. It acts as a central configuration management tool for all OpenOffice.org applications. You can use it to set global options for all OpenOffice.org applications, or specific options for each indi- vidual component. For instance, in Figure 6.2, you can change the user details and infor- mation, and this is reflected across all OpenOffice.org applications. 6 FIGURE 6.2 You can set user details for all OpenOffice.org applications from this dialog. TIP Two websites provide additional information on the functionality of OpenOffice.org: http://lingucomponent.openoffice.org/download_dictionary.html-This site provides instructions and files for installing spelling and hyphenation dictionaries, which are not included with OpenOffice.org. http://sourceforge.net/projects/ooextras/-This site provides templates, macros, and clip art, which are not provided with OpenOffice.org. OpenOffice.org is a constant work in progress, but the current release is on par with the Sun version of StarOffice 8. You can browse to the OpenOffice.org website to get docu- mentation and answers to frequently asked questions and to offer feedback. Working with OpenOffice.org Writer Out of all the applications that make up OpenOffice.org, the one that you are most likely to use on a regular basis is Writer, the OpenOffice.org word processor. With a visual style very similar to Microsoft's Word, Writer has a number of strengths over its commercial CHAPTER 6 Productivity Applications 138 and vastly more expensive rival. In this section you will learn how to get started with Writer and make use of some of its powerful formatting and layout tools. NOTE You may be interested to know that Writer was the primary word processor chosen to write and edit this book. Getting Started with Writer You can access Writer by going to the Applications, Office menu and selecting OpenOffice.org Word Processor. After a few seconds Writer opens up with a blank docu- ment and a blinking cursor awaiting your command. It can be tempting to just dive in and start typing your document, but it can be worthwhile to do some initial configuration before you start work. First of all, make sure that the options are set to your requirements. Click the Tools menu and select Options to bring up the Options dialog box, as seen in Figure 6.2. The initial screen allows you to personalize OpenOffice.org with your name, address, and contact details, but there are options to configure features that you might also want to alter. First of all, check that your default paths are correct by clicking the Paths option. You may prefer to alter the My Documents path, as shown in Figure 6.3, to something a little more specific than just the Documents directory. FIGURE 6.3 Click the Edit button to choose your default documents directory. You might also want to change OpenOffice.org so that it saves in Microsoft Word format by default, should you so require. This can be done under the Load/Save General options shown in Figure 6.4, and it is a good idea if you value your work to change the Autorecovery settings so that it saves every couple of minutes. Also shown in Figure 6.4 are a set of options that are specific to Writer. From top to bottom, they are Introducing OpenOffice.org 139 FIGURE 6.4 Make sure that you are working with most appropriate file formats for you. . General-Specify options that affect the general use of Writer. . View-Specify what you want Writer to display. . Formatting Aids-Specify whether you want to see non-printing characters. . Grid-Create a grid that you can use to snap frames and images in place. 6 . Basic Fonts-Select your default fonts for your document here. . Print-Specify exactly what you want Writer to output when you print your docu- ment. . Table-Set options for drawing tables within Writer. . Changes-Define how Writer handles changes to documents. . Compatibility-A set of rules that Writer uses to ensure close compatibility with earlier versions of Writer . AutoCaption-Create automatic captions for images, charts, and other objects A little bit of time working through these options can give you a highly personalized and extremely productive environment. Working with Styles and Formatting One of the significant benefits of using Writer is the ability you have to easily apply formatting and styles to extremely complex documents. Depending on the types of docu- ments you work with, you might want to consider creating your own styles beyond the 20 included by default. You can access styles through either the Style drop-down box in the toolbar or the Styles and Formatting window shown in Figure 6.5. If you cannot see the window, press the F11 key to display it. CHAPTER 6 Productivity Applications 140 FIGURE 6.5 Writer's quick and easy-to-use Styles and Formatting tool. The easiest way to work with the Styles and Formatting tool is to highlight the text you want to style and double-click the required style in the window. There are quite a few to choose from, but you might find them restrictive if you have more specialized needs. To start defining your own styles, press Ctrl+F11 to bring up the Style Catalogue, shown in Figure 6.6, where you add, modify and delete styles for pages, paragraphs, lists, characters and frames. FIGURE 6.6 Writer's powerful Style Catalogue gives you control over every aspect of styling. Working with OpenOffice.org Calc The spreadsheet component of OpenOffice.org is named Calc, and is a very capable Excel alternative. Calc is used for storing numerical information that you need to analyze in some way. So, for instance, you could use it to help you budget month by month. It can take care of the Introducing OpenOffice.org 141 calculations for you, as long as you tell Calc what you want it to do. Anyone with experi- ence in Excel will feel right at home with Calc. In this section, we will show you how to get started with Calc, including entering formu- las and formatting. We will also take a look at some of the more advanced features of Calc, including the Data Pilot feature, which allows you to easily summarize information. Getting Started with Calc You can either click the shortcut icon that is located on the top GNOME panel, or select Spreadsheet from the Office menu under the Applications main menu. Whichever route you take, the result is the same and Calc starts to load. By default, Calc loads with a blank spreadsheet just waiting for you to enter information into it. In Figure 6.7, you can see that we have already started to enter some basic infor- mation into Calc. 6 FIGURE 6.7 Use Calc to store numerical and statistical information. Calc's layout makes it easy to organize information into rows and columns. As you can see in the example, we have sales people listed in the left column, customers in the second column, Invoice Date in the third column, and finally Revenue in the fourth column. At the moment, there are no formulas entered to help you interpret the data. Clicking the E30 cell selects it and enables you to enter in a formula in the top formula bar. If you enter in the equal sign, Calc knows that you are entering a formula and works accordingly. In this example, we want to know the total revenue brought in up to now, so the formula to enter is =sum(E4:E29), followed by Return. Calc automatically enters the result into cell CHAPTER 6 Productivity Applications 142 E43 for you to see. Now you want to see what the average order value was. To do this, you have to obtain the number orders made. For this you can use the counta function to count the number of entries in a given list. This is usually used when you need to find out how many entries there are in a text list. So, in cell B30, enter =counta(B4:B29) and press Enter. Calc now counts the number of entries in the range and returns the total in B43. All that remains for you to do is divide the total revenue by the number of orders to find the average order value. So, in cell E31, enter the formula =E30/B30 to get the average order value. TIP Calc offers some nifty little features that you can use quickly if you need to. The hand- iest one in our opinion is the capability to select multiple cells and see straight away the total and average of the range. You will find these figures in the bottom-right sta- tus bar. This has saved us numerous times when we have needed to get this informa- tion quickly! Formatting Your Spreadsheets Getting back to our example, it looks a little basic at the moment as there is no formatting involved. For instance, what's the billing currency? You can also see that some of the cells have text that does not fit, which is highlighted by a small right arrow in the cell. We should also add some labels and titles to our spreadsheet to make it a bit more visually appealing. To start off, all the revenue figures can be changed into currency figures. To do this, select all the cells containing revenue information and click on the small coin icon shown in Figure 6.8. This immediately formats the cells so that they display the dollar sign and also puts in a thousands separator to make the numbers easier to read. FIGURE 6.8 Make numbers more meaningful with the currency and percentage icons. Now you need to space all the cells so that you can read all the information. A quick and easy way to do this is to click the area immediately to the left of column A and immedi- ately above row 1 to select the entire spreadsheet. Now all you have to do is double-click the dividing lines and each column resizes according to its longest entry. Next you can add a little color to the worksheet by using the paint can icon in the toolbar. Select the range B2 to E2 with the mouse cursor and click the background color icon to bring up the color window shown in Figure 6.9. Now select the color you want to use and Calc fills the cells with that color. You can also change the font color by using the icon immediately to the right in the same way. Finally you need a couple more finishing touches. The first one is to enlarge the font for the column headers. Select the range B2 to E2 again and click the font size in the toolbar Introducing OpenOffice.org 143 FIGURE 6.9 Add a touch of color to an otherwise dull spreadsheet with the fill background icon. to change it to something a little larger. You might also want to use the bold and italic options to emphasize the headers and also the totals some more. If you have followed the steps as described, you should end up with a spreadsheet similar to the one in Figure 6.10. 6 FIGURE 6.10 The finished spreadsheet, looking a lot better than before! Summarizing Data with Calc Calc includes a powerful tool that lets you summarize large groups of data to help you when you need to carry out any analysis. This tool is called a data pilot, and you can use it to quickly summarize data that might normally take a long time if you did the calcula- tions manually. Using the sample spreadsheet from earlier, we will take you through how CHAPTER 6 Productivity Applications 144 to build a simple data pilot, showing you how to analyze and manipulate long lists of data. The previous section featured a spreadsheet that showed sales people, customers, date of invoice, and revenue. At the foot of the spreadsheet were a couple of formulas that enabled you to quickly see the total revenue earned and the average order value. Now you want to find out how much sales people have earned individually. Of course you could add this up manually with a calculator, but that would defeat the point of using Calc. So, you need to create a data pilot to summarize the information. First, you need to select all the cells from B2 to E42 as they contain the data you want to analyze. After these are selected, click on the Data menu and select Data Pilot, Start to open the Data Pilot Wizard. The first screen is shown in Figure 6.11 and is defaulted to Current Selection. Make sure that you choose this one to use the data in the selected range and click OK to continue. FIGURE 6.11 Use either the current selection or an external data source to provide the data pilot with information. The next screen enables you to lay out your data pilot as you want it. In this example you want to have Sales Person in the left column marked Row Fields, so click and drag the Sales Person option from the list on the right and drop it onto the Row Fields area. You're also interested in the average unit rate for each sales person, so drag Unit Rate into the Data Fields section and double-click it. In the window that comes up, select Average from the list and click the OK button. Finally, drag Revenue to the Data Field area so you can see how much revenue each sales person brought in. You should end up with something like Figure 6.12; you are almost ready to display your data pilot. The final piece in the puzzle is to tell Calc where you want it to place the finished data pilot. To do this, click the More button to drop down some extra options and select the box Send Results To to choose a new sheet. When you click OK now, Calc builds the data pilot and displays it on a new sheet in your workbook. The new data pilot can be seen in Figure 6.13. Office Suites for Ubuntu As we have mentioned earlier, OpenOffice.org is the default application suite for Ubuntu. However, with all things open source, there are plenty of alternatives should you find that OpenOffice.org does not meet your specific requirements. These include the popular Office Suites for Ubuntu 145 FIGURE 6.12 Lay your data pilot out as you want it. 6 FIGURE 6.13 Summarize large volumes of numerical data with ease, using Calc's Data Pilot function. Gnome Office and also KOffice, the default KDE productivity suite. You are more likely to hear more about OpenOffice.org, especially as more and more people wake up to the fact that it is compatible with Microsoft Office file formats. In fact, the state of Massachusetts recently elected to standardize on two file formats for use in government: the Adobe Acrobat PDF format and the OASIS OpenDocument format, both of which are supported natively in OpenOffice.org. CHAPTER 6 Productivity Applications 146 NOTE The decision by the state of Massachusetts to standardize on PDF and OpenDocument has huge ramifications for the open source world. It is the first time that OpenDocument, an already-agreed open standard, has been specified in this way. What it means is that anyone who wishes to do business with the state government must use OpenDocument-based file formats, and not the proprietary formats in use by Microsoft. Unfortunately for Microsoft, it does not have support for OpenDocument in any of its applications, making them useless to anyone wishing to work with the state government. This is despite Microsoft being a founding member of OASIS, who devel- oped and ratified the OpenDocument standard! Working with Gnome Office The other office suite available for GNOME is Gnome Office, which is a collection of indi- vidual applications. Unlike OpenOffice.org, Gnome Office does not have a coherent suite of applications, meaning that you have to get used to using a word processor that offers no integration with a spreadsheet, and that cannot work directly with a presentation package. However, if you need only one or two components, it is worthwhile investigating Gnome Office. The GTK Widget Set Open Source developers are always trying to make it easier for people to build applica- tions and help in development. To this end, there are a number of widgets or toolkits that other developers can use to rapidly create and deploy GUI applications. These widgets control things such as drop-down lists, Save As dialogs, window buttons, and general look and feel. Unfortunately, whereas Windows and Apple developers have to worry about only one set of widgets each, Linux has a plethora of different widgets, including GTK+, QT, and Motif. What is worse is that these widgets are incompatible with one another, making it difficult to easily move a finished application from one widget set to another. GTK is an acronym for GIMP Tool Kit. The GIMP (The GNU Image Manipulation Program) is a graphics application very similar to Adobe Photoshop. By using the GTK-based jar- gon, we save ourselves several hundred words of typing and help move along our dis- cussion of GNOME Office. You might also see similar references to QT and Motif, as well as other widget sets, in these chapters. Here are some of the primary components of the Gnome Office suite that are available in Ubuntu: . AbiWord-This word processing program enables you to compose, format, and orga- nize text documents and has some compatibility with the Microsoft Word file format. It uses plug-ins (programs that add functionality such as language transla- tion) to enhance its functionality. Office Suites for Ubuntu 147 . Gnumeric-This spreadsheet program enables you to manipulate numbers in a spreadsheet format. Support for all but the most esoteric Microsoft Excel functions means that users should have little trouble trading spreadsheets with Excel users. . The GIMP-This graphics application allows you to create images for general use. It can import and export all common graphic file formats. The GIMP is analogous to Adobe's Photoshop application and is described in Chapter 7, "Multimedia Applications." . Evolution-Evolution is a mail client with an interface similar to Microsoft Outlook, providing email, scheduling, and calendaring. It is described in Chapter 5, "On the Internet." The loose association of applications known as Gnome Office includes several additional applications that duplicate the functionality of applications already provided by Ubuntu. Those extra GNOME applications are not included in a default installation of Ubuntu to eliminate redundancy. They are all available from the Gnome Office website, at http:/ /www.gnome.org/gnome-office/. Both The GIMP and Evolution are available with Ubuntu by default. You have to use synaptic to retrieve the remaining components. Ubuntu provides the AbiWord editor, shown in Figure 6.14, as part of its Extras. AbiWord can import XML, Microsoft Word, RTF, UTF8, plain text, WordPerfect, KWord, and a few other formats. AbiWord is notable for its use of plug-ins, or integrated helper applications, that extend its capabilities. These plug-ins add language translation, HTML editing, a 6 thesaurus, a Linux command shell, and an online dictionary, among other functions and features. If you just need a simple yet powerful word processing application, you should examine AbiWord. AbiWord is not installed by default in Ubuntu so you'll need to install it either using apt-get or synaptic. The package is simply called abiword-gnome although you might want to install the meta-package gnome-office which will include the other Gnome Office applications. After you've installed Abiword, it becomes available in the Applications menu, under the Office submenu. Simply click the icon to launch the application. If you are familiar with Microsoft Works, the AbiWord interface will be familiar to you because its designers based the interface upon Works. You can use the Gnumeric spreadsheet application to perform financial calculations and to graph data, as shown in Figure 6.15. It can import comma- or tab-separated files, text, or files in the Gnumeric XML format, saving files only as XML or text. You need to install Gnumeric using either apt-get or synaptic in the same way as Abiword. If you have already installed the gnome-office package then Gnumeric will be available under Applications, Office as Gnumeric Spreadsheet. After you press Enter, the main Gnumeric window appears. You enter data in the spread- sheet by clicking a cell and then typing in the text box. To create a graph, you click and drag over the spreadsheet cells to highlight the desired data, and then you click the Graph Wizard icon in Gnumeric's toolbar. Gnumeric's graphing component launches and you are CHAPTER 6 Productivity Applications 148 FIGURE 6.14 AbiWord is a word processing program for Ubuntu, GNOME, and X11. It handles some formats that OpenOffice.org cannot, but does not yet do well with Microsoft Word formats. FIGURE 6.15 GNOME's Gnumeric is a capable financial data editor-here working with the same spreadsheet used earlier. OpenOffice.org also provides a spreadsheet application, as does KOffice. Office Suites for Ubuntu 149 guided through a series of dialogs to create a graph. When you are finished, you can click and drag a blank area of your spreadsheet, and the graph appears. The Project Planner application is useful for tracking the progress of projects, much like its Windows counterpart, Microsoft Project. When the main window is displayed, you can start a new project or import an existing project. The application provides three views: Resources, Gantt Charts, and Tasks. Working with KOffice The KDE office suite KOffice was developed to provide tight integration with the KDE desktop. Integration enables objects in one application to be inserted in other applications via drag-and-drop, and all the applications can communicate with each other, so a change in an object is instantly communicated to other applications. The application integration provided by KDE is a significant enhancement to productivity. (Some GNOME desktop applications share a similar communication facility with each other.) If you use the KDE desktop instead of the default GNOME desktop, you can enjoy the benefits of this integra- tion, along with the Konqueror web and file browser. The word processor for KOffice is KWord. KWord is a frames-based word processor, meaning that document pages can be formatted in framesets that hold text, graphics, and objects in enclosed areas. Framesets can be used to format text on a page that includes text and images within columns that the text needs to flow around, making KWord an 6 excellent choice for creating documents other than standard business letters, such as newsletters and brochures. KWord and other components of KOffice are still under development and lack all the polished features of OpenOffice.org and AbiWord. However, it does have the ability to work with the OpenDocument format found in OpenOffice.org, as well as limited compat- ibility with Microsoft file formats. You can access the KOffice components from the Office menu. KWord asks you to select a document for your session. The KWord client, shown in Figure 6.16, offers sophisticated editing capabilities, including desktop publishing. The KOffice KSpread client is a functional spreadsheet program that offers graphing capa- bilities. Like KWord, KSpread can be accessed from the Office menu. KDE includes other productivity clients in its collection of KOffice and related applica- tions. These clients include an address book, time tracker, calculator, notepad, and sched- uler. One popular client is Kontact, which provides daily, weekly, work week, and monthly views of tasks, to-do lists, and scheduled appointments with background alarms. A journal, or diary, function is also supported within it, and you can synchronize informa- tion with your Palm Pilot. You can launch this client from the Office menu. CHAPTER 6 Productivity Applications 150 FIGURE 6.16 The KOffice KWord word processing component is a sophisticated frames-based WYSIWYG editor that is suitable for light desktop publishing, supporting several formats, includ- ing WordPerfect. A typical Kontact window is shown in Figure 6.17. Productivity Applications Written for Microsoft Windows Microsoft Windows is fundamentally different from Linux, yet you can install and run some Microsoft Windows applications in Linux by using an application named Wine. Wine enables you to use Microsoft Windows and DOS programs on Unix-based systems. Wine includes a program loader that you can use to execute a Windows binary, along with a .dll library that implements Windows command calls, translating them to the equiva- lent Unix and X11 command calls. Because of frequent updates to the Wine code base, Wine is not included with Ubuntu. Download a current version of Wine from http://www. winehq.org/. To see whether your favorite application is supported by Wine, you can look at the Wine application database at http://appdb.winehq.org/appbrowse.php. As well, there are other solutions to enable use of Microsoft productivity applications, primarily CodeWeavers' CrossOver Office. If you are after a painless way of running not only Microsoft Office, but also Apple iTunes and other software, you should really pay CodeWeavers a visit. CrossOver Office is one of the simplest programs you can use to get Windows-based programs to work. Check out www.codeweavers.com to download a trial Productivity Applications Written for Microsoft Windows 151 FIGURE 6.17 KDE's Kontact client supports editing of tasks and schedules that you can sync with your PDA. Shown here is the address book as well. 6 version of the latest software. It requires registration, but do not worry-the guys at CodeWeavers are great and will not misuse your details. The big plus is that you get a whole month to play around with the trial before you decide whether to buy it. Of course, you might get to the end of the 30 days and realize that Linux does what you want it to do and you don't want to go back to Windows. Do not be afraid; take the plunge! Relevant Ubuntu Commands The following commands give you access to productivity applications, tools, and processes in Ubuntu: . oowriter-OpenOffice.org's Writer . oocalc-OpenOffice.org's Calc . ooimpress-OpenOffice.org's Impress . koshell-KDE's KOffice office suite shell . kspread-KDE's KSpread spreadsheet . gimp-The GIMP (GNU Image Manipulation Package) . gnumeric-A spreadsheet editor for GNOME . planner-A project management client for GNOME . abiword-A graphical word processor for GNOME CHAPTER 6 Productivity Applications 152 Reference . http://www.openoffice.org-The home page for the OpenOffice.org office suite. . http://www.gnome.org/gnome-office/-The GNOME Office site. . http://www.koffice.org/-The home page for the KOffice suite. . http://www.codeweavers.com/-Website of the hugely popular CrossOver Office from CodeWeavers that allows you to run Windows programs under Linux. 7 CHAPTER IN THIS CHAPTER . Sound and Music Multimedia Applications . Graphics Manipulation . Using Digital Cameras with Ubuntu . Burning CDs and DVDs in Ubuntu . Viewing Video The twenty-first century has become the century of the . Reference digital lifestyle, with millions of computer users around the world embracing new technologies, such as digital cameras, MP3 players, and other assorted multimedia gadgets. Whereas 10 years ago you might have had a collection of WAV files littering your Windows installation, nowadays you are more likely to have hundreds, if not thousands of MP3 files scattered across various computers. Along with video clips, animations, and other graphics, the demand for organizing and maintaining these vast libraries is driving development of applications. Popular proprietary applica- tions such as iTunes and Google's Picasa are coveted by Linux users, but open source applications are starting to appear that provide real alternatives, and for some the final reasons they need to move to Linux full time. This chapter provides an overview of some of the basic multimedia tools included with Ubuntu. You will see how to create your own CDs, watch TV, rip audio CDs into the open source Ogg audio format for playback, as well as manage your media library. You will also learn about how Ubuntu handles graphics and pictures. Sound and Music Linux historically had a reputation of lacking good support for sound and multimedia applications in general. However, great strides have been made in recent years to correct this, and support is now a lot better than it used to be. (It might make you smile to know that Microsoft no longer supports the Microsoft Sound Card, but Linux users still enjoy support for it, no doubt just to annoy the folks in CHAPTER 7 Multimedia Applications 154 Redmond.) Unix, however, has always had good multimedia support as David Taylor, Unix author and guru, points out: The original graphics work for computers was done by Evans & Sutherland on Unix systems. The innovations at MIT's Media Lab were done on Unix workstations. In 1985, we at HP Labs were creating sophisticated multimedia immersive work environments on Unix workstations, so maybe Unix is more multimedia than suggested. Limitations in Linux support doesn't mean Unix had the same limitations. I think it was more a matter of logis- tics, with hundreds of sound cards and thousands of different possible PC configurations. That last sentence sums it up quite well. Unix had a limited range of hardware to support; Linux has hundreds of sound cards. Sound card device driver support has been long lacking from manufacturers, and there is still no single standard for the sound subsystem in Linux. In this section, you learn about sound cards, sound file formats, and the sound applica- tions provided with Ubuntu. Sound Cards Ubuntu supports a wide variety of sound hardware and software. Two models of sound card drivers compete for prominence in today's market: . ALSA, the Advanced Linux Sound Architecture, which is entirely open source . OSS, the Open Sound System, which offers free and commercial drivers Ubuntu uses ALSA because ALSA is the sound architecture for the 2.6 series kernels. ALSA supports a long list of sound cards. You can review the list at http://www.alsa- project.org/alsa-doc/. If your sound card is not supported, it might be supported in the commercial version of OSS. You can download a trial version of commercial software and test your sound card at http://www.opensound.com/download.cgi. Ubuntu detects most sound cards during the original installation and should detect any new additions to the system during boot up. To configure the sound card at any other time, use the sound preferences graphical tool found under System, Preferences, Sound. Sound and Music 155 Adjusting Volume Ubuntu offers a handy utility that you can use to control the volumes for various outputs from your computer. For a simple master volume control, just click on the speaker icon in the top-right corner of the screen and move the slider up or down, as shown in Figure 7.1. Alternatively you can control all the output volumes for the system to make sure that you have set everything to your taste, as shown in Figure 7.2. To access the volume control, right-click on the speaker icon and select Open Volume Control. FIGURE 7.1 Control the master volume level with the volume slider. 7 FIGURE 7.2 Use the volume control to manage volume settings for all your sound output devices. CHAPTER 7 Multimedia Applications 156 Sound Formats A number of formats exist for storing sound recordings. Some of these formats are associ- ated with specific technologies, and others are used strictly for proprietary reasons. Ubuntu supports several of the most popular sound formats, including . raw (.raw)-More properly known as headerless format, audio files using this format contain an amorphous variety of specific settings and encodings. All other sound files contain a short section of code at the beginning-a header-that identifies the format type. . MP3 (.mp3)-A popular, but commercially licensed, format for the digital encoding used by many Linux and Windows applications. MP3 is not supported by any soft- ware included with Ubuntu (which advises you to use the open source Ogg-Vorbis format instead). . WAV (.wav)-The popular uncompressed Windows audio-visual sound format. It is often used as an intermediate file format when encoding audio. . Ogg-Vorbis (.ogg)-Ubuntu's preferred audio encoding format. You enjoy better compression and audio playback, and freedom from lawsuits when you use this open-source encoding format for your audio files. NOTE Because of patent and licensing issues, Ubuntu has removed support for the MPEG, MPEG2, and MPEG3 (MP3) file formats in Ubuntu Linux. Although we cannot offer any legal advice, it appears that individuals using MP3 software are okay; it is just that Ubuntu cannot distribute the code because it sells its distribution. It seems-at this point-perfectly all right for you to obtain an MP3-capable version of Xmms (for example), which is a Winamp clone that plays MPEG1/2/3 files. You can get Xmms directly from http://www.xmms.org/ because that group has permission to distribute the MP3 code. You can also enable the MP3 codec within Ubuntu by downloading a plugin for gstream- er, the GNOME audio system. You do this by installing the gstreamer0.10-plugins- ugly package, which enables the MP3 codec in all the GNOME applications. Ubuntu includes software (such as the sox command used to convert between sound formats) so that you can more easily listen to audio files provided in a wide variety of formats, such as AU (from NeXT and Sun), AIFF (from Apple and SGI), IFF (originally from Commodore's Amiga), RA (from Real Audio), and VOC (from Creative Labs). TIP To learn more about the technical details of audio formats, read Chris Bagwell's Audio Format FAQ at http://www.cnpbagwell.com/audio.html. Sound and Music 157 Ubuntu also offers utilities for converting sound files from one format to another. Conversion utilities come in handy when you want to use a sound in a format not accepted by your current application of choice. A repository of conversion utilities resides at http://ibiblio.org/pub/linux/apps/sound/convert/!INDEX.html and includes MP3 and music CD-oriented utilities not found in Ubuntu. You have to know how to compile and install from source, however. Ubuntu does provide sox, a self-described sound translator that converts music among the AIFF, AU, VAR, DAT, Ogg, WAV, and other formats. It also can be used to change many other parameters of the sound files. Timidity is a MIDI-to-WAV converter and player. If you are interested in MIDI and musical instruments, Timidity is a handy application; it handles karaoke files as well, displaying the words to accompany your efforts at singing. Listening to Music If you're anything like us, you might be a huge music fan. One of the downsides of having a fairly large music collection is the physical problem of having to store so many CDs. Wouldn't it be great if you could pack them all away somewhere, yet still have access to all the music when you want it? Some hi-fi manufacturers experimented with rather bulky jukeboxes that stored 250 CDs at once. The main downside with that was that finding a particular piece of music could take hours, having to cycle through each CD in the hope that it would match your mood. Fortunately for you and me, Ubuntu is fantastic at working with CDs, even allowing you to rip all your CD collection into a vast searchable music library, letting you quickly create playlists and even giving you the ability to create your own customized CDs. Getting started couldn't be easier, mainly because Ubuntu comes preconfigured with everything 7 you need to get started. RhythmBox A standard CD player application was supplied in previous versions of Ubuntu, but this has now been dropped largely due to the fact that other applications made it redundant. In its place is RhythmBox, a useful application that does more than just play CDs. If you insert an audio CD into your computer, RhythmBox will appear and attempt to obtain information about the CD from the Internet service MusicBrainz. If it's successful, then you'll see the name of the CD appear in the left window of RhythmBox, as shown in Figure 7.3. When you're ready to play your CD, simply click the name of the CD under the devices section and click the Play button, as shown in Figure 7.4. You can also define whether the CD should just repeat itself until stopped, or whether you want to shuffle the music (randomize the playlist). Of course, just listening to your CDs doesn't really change anything; RhythmBox acts just like a regular CD player, allowing you to listen to specific tracks and define how you want to listen to your music by using playlists or sorting it by artists. The real fun starts when you click the Copy to Library button in your toolbar. RhythmBox then starts to extract, or CHAPTER 7 Multimedia Applications 158 FIGURE 7.3 RhythmBox automatically downloads information about your CD, if it's available. FIGURE 7.4 Just like the normal controls on a CD player, RhythmBox responds to your requests. Sound and Music 159 rip, the audio from your CD and store it within the Music directory that is found under your home directory. If you have already clicked this button, then go to the Places menu and select Music (see Figure 7.5) to see what's happening. FIGURE 7.5 RhythmBox does a good job of keeping your newly ripped audio files organized. Depending on the speed of your optical drive and the power of your computer, the 7 ripping process can take up to 15 minutes to complete a full CD. As it goes along, RhythmBox automatically adds the files to your media library, which you can access by clicking the Music button on the left side of the RhythmBox screen, as you can see in Figure 7.6. Within the RhythmBox interface you can easily browse through the list of artist names or album titles, which affects the track listing that appears at the bottom of the screen. The numbers after each artist and album tell you how many tracks are assigned to that specific entry, giving you a heads up before you click on them. Double-clicking on any entry auto- matically starts the music playing, so for example, double-clicking an artist's name causes the music tracks associated with that artist to start playing. When a track starts to play, RhythmBox automatically attempts to retrieve the CD artwork, which it then displays in the bottom-left corner of the screen, shown in Figure 7.7. There's a lot more that you can do with RhythmBox, including downloading and listening to podcasts. A good place to start if you want to get hold of the latest podcasts is to head to the Linux Link (www.thelinuxlink.net) where you'll find a long list of Linux-related podcasts. All you have to do is right-click on the RSS link for the Ogg feed and select Copy Link Location. Now go to RhythmBox and press Ctrl+P, or go to Music, New Podcast Feed, paste the link into the field, and click the Add button. RhythmBox then contacts the CHAPTER 7 Multimedia Applications 160 FIGURE 7.6 RhythmBox gives you a neat interface to browse through your burgeoning music collection. FIGURE 7.7 A nice touch is RhythmBox's being able to automatically retrieve CD artwork from the Internet. Sound and Music 161 server and attempts to download the most recent episodes of your chosen podcast, which you can see happening in Figure 7.8. FIGURE 7.8 Manage your podcasts using RhythmBox and never miss an episode again. Banshee Of course, other programs are available for listening to music within Ubuntu. One of our 7 particular favorites is Banshee, another music application that can also handle ripping and playing back music. Banshee is not installed by default with Ubuntu, so you'll need to use synaptic to download and install it. After it's installed, you can access it under Applications, Sound and Video, as shown in Figure 7.9, complete with a selection of music. Banshee can rip music in a similar way to RhythmBox; all you have to do is insert a CD and Banshee will detect it. If you want to import it into Banshee, simply select it in the left navigation pane and click the Import CD button. In Figure 7.10, you can see Banshee ripping a CD. CHAPTER 7 Multimedia Applications 162 FIGURE 7.9 Banshee provides an uncluttered interface, cutting straight to letting you listen to your music. FIGURE 7.10 Banshee makes light work of ripping your CD collection. Just as with RhythmBox, Banshee will attempt to download the cover art and track information for the CD that you're either playing or ripping. Graphics Manipulation 163 Getting Music into Ubuntu with Sound Juicer A handy utility that is included with Ubuntu is Sound Juicer, found under Applications, Sound and Video as the Audio CD Extractor. Sound Juicer automatically detects when you install a CD and attempt to retrieve the track details from the Internet. From there it will rip the CD tracks into Ogg files for storage on your filesystem. You can see Sound Juicer in action in Figure 7.11 FIGURE 7.11 Create your own digital music collection with Sound Juicer. 7 Graphics Manipulation Over a very short space of time, digital cameras and digital imagery have become extremely popular, to the point where some traditional film camera manufacturers are switching solely to digital. This meteoric rise has led to an increase in the number of applications that can handle digital imagery. Linux, thanks to its rapid pace of develop- ment, is now highly regarded as a multimedia platform of choice for editing digital images. This section of the chapter discusses The GIMP, a powerful graphics manipulation tool. You also learn about graphic file formats supported by Ubuntu, as well as some tools you can use to convert them if the application you want to use requires a different format. The GNU Image Manipulation Program One of the best graphics clients available is The GIMP. The GIMP is a free, GPLed image editor with sophisticated capabilities that can import and export more than 30 different graphics formats, including files created with Adobe Photoshop. It is often compared with CHAPTER 7 Multimedia Applications 164 Photoshop, and The GIMP represents one of the GNU Projects' first significant successes. Many images in Linux were prepared with The GIMP. The GIMP can be found under the Applications, Graphics menu as simply The GIMP. You see an installation dialog box when The GIMP is started for the first time, and then a series of dialog boxes that display information regarding the creation and contents of a local GIMP directory. This directory can contain personal settings, preferences, external application resource files, temporary files, and symbolic links to external software tools used by the editor. What Does Photoshop Have That Isn't in the GIMP? Although The GIMP is powerful, it does lack two features Adobe Photoshop offers that are important to some graphics professionals. The first of these is the capability to generate color separations for commercial press printers (CMYK for the colors cyan, magenta, yellow, and key [or black]). The GIMP uses RGB (red, green, and blue), which is great for video display, but not so great for printing presses. The second feature The GIMP lacks is the use of Pantone colors (a patented color specification) to ensure accurate color matching. If these features are unimportant to you, The GIMP is an excellent tool. If you must use Adobe Photoshop, the current version of CodeWeavers' CrossOver Office will run Photoshop in Linux. These deficiencies might not last long. A CMYK plug-in is in the works, and the Pantone issues are likely to be addressed in the near future as well. After the initial configuration has finished, The GIMP's main windows and toolboxes appear. The GIMP's main window contains tools used for selecting, drawing, moving, view enlarging or reducing, airbrushing, painting, smudging, copying, filling, and selecting color. Depending on the version installed on your system, the toolbox can host more than 25 different tools. The toolbox's File, Xtns, and Help menus are used for file operations (including sending the current image by electronic mail), image acquisition or manipulation, and documenta- tion, respectively. If you right-click an open image window, you see the wealth of The GIMP's menus, as shown in Figure 7.12. Using Scanners in Ubuntu With the rise of digital photography, there has been an equal decline in the need for image scanners. However, there are still times that you want to use a scanner, and Ubuntu makes it easy. You can also use many types of image scanners with The GIMP. In the past, the most capable scanners required a SCSI port. Today, however, most scanners work through a USB port. You must have scanner support enabled for Linux (usually through a loaded kernel module, scanner.o) before using a scanner with The GIMP. Graphics Manipulation 165 FIGURE 7.12 Right-click on an image window to access The GIMP's cascading menus. Although some scanners can work via the command line, you will enjoy more productive scanning sessions if you use a graphical interface because GUI features, such as previewing and cropping, can save time before actually scanning an image. Most scanners in use with Linux use the Scanner Access Now Easy (SANE) package, which supports and enables 7 graphical scanning sessions. SANE consists of two software components. A low-level driver enables the hardware support and is specific to each scanner. Next, a graphical scanner interface X client known as xsane is used as a plug-in or ancillary program (or script) that adds features to The GIMP. NOTE Although xsane is commonly used as a GIMP plug-in, it can also be used as a stand- alone program. Another useful program is Joerg Schulenburg's gocr client, used for optical character recognition (OCR). Although not a standalone application, it is includ- ed in the Kooka scanning application. This program works best with 300 dots per inch (dpi) scans in several different graphics formats. OCR is a resource-intensive task and can require hundreds of megabytes of disk storage! A list of currently supported scanners can be found at http://www.sane-project.org/sane- supported-devices.html. Unfortunately, if your scanner doesn't appear on the list, you should not expect it to work with the SANE software. There is also a list on that same page CHAPTER 7 Multimedia Applications 166 for drivers not yet included, but you must be able to compile the application from source to use them. Supported USB scanners are automatically detected and the appropriate driver is loaded automatically. The USB devices tell the USB system several pieces of information when they are connected-the most important of which are the vendor ID and the device ID. This identification is used to look up the device in a table and load the appropriate driver. You will find that Ubuntu successfully identifies and configures most modern USB-based scanners. Many scanners are supported in Linux. If yours is not, it still might be possible to use it. The Kooka and Xsane scanner applications are included with Ubuntu and are fairly straightforward to use. They can both be found in the Graphics menu as the Scanner Tool. Working with Graphics Formats Image file formats are developed to serve a specific technical purpose (lossless compres- sion, for example, where the file size is reduced without sacrificing image quality) or to meet a need for a proprietary format for competitive reasons. Many file formats are covered by one or more patents. For example, the GIF format had fallen into disfavor with the open-source crowd because the patent holder waited a while before deciding to enforce his patent rights rather than being upfront with requests for patent royalties. If you want to view or manipulate an image, you need to identify the file format to choose the proper tool for working with the image. The file's extension is your first indica- tor of the file's format. The graphics image formats supported by the applications included with Ubuntu include . .bmp-Bitmapped graphics, commonly used in Microsoft Windows . .gif-CompuServe Graphics Interchange Format . .jpg-Joint Photographic Experts Group . .pcx-IBM Paintbrush . .png-Portable Network Graphics . .svg-Scalable Vector Graphics . .tif-Tagged Image File format An extensive list of image file extensions can be found in the man page for ImageMagick, an excellent application included with Ubuntu, which you learn more about in upcoming sections of this chapter. Graphics Manipulation 167 TIP Ubuntu includes dozens of graphics conversion programs that are accessible through the command line, and there are few, if any, graphics file formats that cannot be manipulated when using Linux. These programs can be called in Perl scripts, shell scripts, or command-line pipes to support many types of complex format conversion and image manipulation tasks. See the man pages for the ppm, pbm, pnm, and pgm fam- ilies of commands. Also see the man page for the convert command, which is part of a suite of extremely capable programs included with the ImageMagick suite. Often, a file you want to manipulate in some way is in a format that cannot be used by either your graphics application or the final application. The solution is to convert the image file-sometimes through several formats. The convert utility from ImageMagick is useful, as is the netpbm family of utilities. If it is not already installed, ImageMagick can be installed with the Add Remove Software GUI found in the System Settings menu; the netpbm tools are always installed by default. The convert utility converts between image formats recognized by ImageMagick. Color depth and size also can be manipulated during the conversion process. You can use ImageMagick to append images, surround them with borders, add labels, rotate and shade them, and perform other manipulations well suited to scripting. Commands associated with ImageMagick include display, animate, identify, and import. The application supports more than 130 different image formats-(all listed in the man page for ImageMagick). The netpbm tools are installed by default because they compose the underpinnings of graphics format manipulation. The man page for each image format lists related conver- 7 sion utilities; the number of those utilities gives you some indication of the way that format is used and shows how one is built on another: . The man page for ppm, the portable pixmap file format, lists 47 conversion utilities related to ppm. This makes sense because ppm, or portable pixmap, is considered the lowest common denominator for color image files. It is therefore often used as an intermediate format. . The man page for pgm, the portable graymap file format, lists 22 conversion utilities. This makes sense because pgm is the lowest common denominator for grayscale image files. . The man page for pnm, the portable anymap file format, lists 31 conversion utilities related to it. However, there is no format associated with PNM because it operates in concert with ppm, pgm, and pbm. . An examination of the man page for pbm, the portable bitmap file format, reveals no conversion utilities. It's a monochrome format and serves as the foundation of the other related formats. CHAPTER 7 Multimedia Applications 168 Capturing Screen Images You can use graphics manipulation tools to capture images that are displayed on your computer screen. Although this technique was used for the production of this book, it has broader uses; there is truth to the cliché that a picture is worth a thousand words. Sometimes it is easier to show an example than it is to describe it. A captured screen image (also called a screen grab or a screenshot) can be used to illustrate an error in the display of an application (a font problem, for example) or an error dialog that is too complex to copy down by hand. You might just want to share an image of your beautifully crafted custom desktop configuration with your friends or illustrate your written documents. When using the GNOME desktop, you can take advantage of the built-in screenshot mechanism (gnome-panel-screenshot). Access this tool by pressing the Print Screen key. (Alt+Print Screen takes a screenshot of only the window that has focus on a desktop.) Captured images are saved in .png format. Using Digital Cameras with Ubuntu Most digital cameras used in connection with Ubuntu fall into one of two categories: webcams (small, low-resolution cameras connected to the computer's interface) or hand- held digital cameras that record image data on disks or memory cards for downloading and viewing on a PC. Ubuntu supports both types. Other types of cameras, such as surveillance cameras that connect directly to a network via wired or wireless connections, need no special support (other than a network connection and viewing software) to be used with a Linux computer. Ubuntu supports hundreds of different digital cameras, from early parallel-port (CPiA chipset-based) cameras to today's USB-based cameras. You can even use Intel's QX3 USB microscope with Ubuntu. If you prefer a standalone network-based webcam, explore the capabilities of Linux-based cameras from Axis (at http://www.axis.com/products/video/ camera/productguide.htm). The following sections describe some of the more commonly used still camera hardware and software supported by Ubuntu. Handheld Digital Cameras Digital cameras are one of the major success stories of the last few years. Now you can take pictures and see previews of your pictures immediately. The pictures themselves are stored on discs or memory cards that can be easily plugged into Ubuntu for further manipulation, using The GIMP or other software. Unfortunately, most of the supplied software that comes with the cameras tend to be for Windows users only, making you reliant on the packages supplied with Ubuntu. The good news, though, is that because of the good development carried out in Ubuntu and GNOME, you are now able to plug pretty much any camera into your computer through a USB interface and Ubuntu automatically recognizes the camera as a USB mass Using Digital Cameras with Ubuntu 169 storage device. You can even set Ubuntu to recognize when a camera is plugged in so that it automatically imports your photographs for you. To do this, you need to set up your settings for removable drives and media. You can find this in the System, Preferences menu. Click the Cameras tab and select the option to import digital photographs when connected (see Figure 7.13). FIGURE 7.13 Use GNOME's intelligent handling of removable media by setting it to import your photographs automatically. Now whenever you connect a digital camera to your computer GNOME automatically 7 detects it (see Figure 7.14), and asks whether you want to import the photographs. FIGURE 7.14 GNOME detects the presence of a digital camera and asks whether the photos should be imported. Using F-Spot Ubuntu has access to the superb F-Spot photo management application. When F-Spot is installed, you can find it under the Applications, Graphics menu listed as F-Spot Photo Manager. If you have used the popular Google Picasa application, you will feel instantly at home with F-Spot because it is similar in many ways. CHAPTER 7 Multimedia Applications 170 The first time you open F-Spot, you are asked to import your first batch of photographs, as shown in Figure 7.15. You can also assign a tag to them, if you want to track particular types of photographs. You might want to allow F-Spot to copy the photograph to a new directory, Photos-something that may help you organize your photos on the system. FIGURE 7.15 The versatile F-Spot makes adding photos to your library easy. When you are ready, click Import to let F-Spot import the photos into the library. The pictures appear in the F-Spot library, and are stored according to the date they were taken. This information is given to F-Spot by the EXIF information that your camera stores each time you take a picture. In Figure 7.16, you can see the standard F-Spot window. Use the timeline across the top of the window to browse through your photographs, and you can do some minor editing by double-clicking on any photograph. F-Spot is still in its infancy, but development is ongoing, so keep a eye open for any major updates. Burning CDs and DVDs in Ubuntu Linux is distributed across the Internet through the use of ISOs that are waiting to be written to CDs or DVDs. Therefore learning how to burn discs is essential if you have to download and install a Linux distribution. Not only that, but you are likely to want to use CDs and, more commonly, DVDs to back up your music, family pictures, or other impor- tant files. With DVD writers being so cheap, the format is now pervasive and more and more people use cheap DVDs as way of archiving simply due to the larger storage size available. Of course, you can use blank CD media, but they don't have anywhere near the capacity offered by DVDs albeit being slightly cheaper. Today's high-resolution digital cameras can occupy upward of 3MB per shot, and music files can be anything from 1MB to 10MB+ in size. These file sizes make DVD the obvious choice, but there are still occa- sions when you need to write to a CD. You can use CDs and DVDs to Burning CDs and DVDs in Ubuntu 171 FIGURE 7.16 Browse through your extensive photo collection and correct minor problems using F-Spot. . Record and store multimedia data, such as backup files, graphics images, and music. . Rip audio tracks from music CDs (ripping refers to extracting music tracks from a music CD) and compile your own music CDs for your personal use. Linux audio clients and programs support the creation and use of many different types of 7 audio formats. Later sections of this chapter discuss sound formats, sound cards, music players, and much more. Because CD burning is used for many other purposes in Ubuntu, we cover the essentials of that process first in this chapter. To record multimedia data on a CD, you must have installed a drive with CD writing capabilities on your system. To make certain that your CD writer is working, use wodim -scanbus to get the information for using the CD drive under SCSI (small computer system interface) emulation: # wodim -scanbus scsibus0: 0,0,0 0) 'HL-DT-ST' 'RW/DVD GCC-4120B' '2.01' Removable CD-ROM 0,1,0 1) * 0,2,0 2) * 0,3,0 3) * 0,4,0 4) * 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * CHAPTER 7 Multimedia Applications 172 Here, you can see that the CD writer (in this example, a CD writer/DVD reader) is present and is known by the system as device 0,0,0. The numbers represent the scsibus/target/lun (logical unit number) of the device. You need to know this device number when you burn the CD, so write it down or remember it. Creating CDs and DVDs with Ubuntu's Graphical Clients Although adequate for quick burns and use in shell scripting, the command-line tech- nique for burning CDs and DVDs is an awkward choice for many people until they become proficient at it and learn all the arcane commands. Fortunately, Ubuntu provides several graphical clients. Nautilus With Ubuntu, enhanced functionality has been included in the default file browser Nautilus. Under the Places menu item is a CD/DVD Creator selection. To use it, insert a blank CD or DVD into your CD-R/DVD-R drive. You must have two Nautilus windows open: one that shows the files you want to save to the CD, and a second one open to the CD/DVD Creator Folder (accessed in Nautilus by the Places menu, CD/DVD Creator) loca- tion. Click on the Write to Disc button as shown in Figure 7.17 to bring up the Write dialog; at the next dialog box, choose the format to which you want to write the disc. Nautilus CD/DVD Creator supports writing to a disc image file, commonly known as ISO. You can also give your new disc a label and tell Nautilus at what speed you want to write the disc. Finally, click the Write button to start the burning process-it is that simple! FIGURE 7.17 Creating a CD or DVD using the Nautilus browser is made easy with the drag- and-drop features it provides. Brasero A relatively new addition to the Ubuntu default distribution is Brasero, an easy-to-use graphical CD and DVD burning application. Installed as part of the standard Live CD installation, Brasero is found under Applications, Sound and Video as Brasero Disc Burning. Burning CDs and DVDs in Ubuntu 173 Brasero takes a project-based approach to disc burning, opening up with a wizard that allows you to select from four different tasks that you'll commonly want to do. You can see the opening screen in Figure 7.18. Brasero also remembers previous "projects" allowing you to quickly create several copies of a disc, which is ideal if you're planning on passing on copies of Ubuntu to your friends and family. FIGURE 7.18 A new but welcome addition is Brasero, giving you an intuitive way to create data and audio CDs and DVDs. Burning a Data CD or DVD is as easy as selecting the option in the opening screen and dragging and dropping the files you want to include from the directory tree on the left to the drop area on the right. Brasero keeps an eye on the disc size, and tells you when you exceed the limits. By default it selects a 4.3GB DVD, but you can change this by using the CD icon toward the bottom of the screen (shown in Figure 7.19). Brasero also allows you 7 the option to overburn a CD or DVD. Overburning makes use of extra space on recordable media by squeezing a little extra onto your disc. It can add up to an additional 10% of the disc's capacity, but it runs the risk of making the disc incompatible with CD or DVD drives because overburning does not adhere to established standards. FIGURE 7.19 Brasero can write to a selection of recordable media, even accommodating over- burning if you want to use it. When you're ready to create your disc, simply click the Burn button and Brasero will ask you to choose a label for the disc. You're also able to choose whether you want to create an image (very useful if you plan to make multiple copies of the same disc although not at CHAPTER 7 Multimedia Applications 174 the same time). You can do this by selecting File, image in the drop-down menu on the Burn screen (see Figure 7.20). To ensure that your disc image can be used with your friends and colleagues who use Windows, you should choose the Increase compatibility with Windows systems option. FIGURE 7.20 If you're creating an image for use with Windows, use the compatibility option to ensure it will work. Finally, click the Burn button to start the process and Brasero will start creating your new CD or DVD. How long it takes depends on the amount of data you are writing and also the speed of your drive. Creating CDs from the Command Line In Linux, creating a CD at the command line is a two-step process. You first create the iso9660-formatted image, and you then burn or write the image onto the CD. The iso9660 is the default file system for CD-ROMs. Use the mkisofs command to create the ISO image. The mkisofs command has many options (see the man page for a full listing), but use the following for quick burns: $ mkisofs -r -v -J -l -o /tmp/our_special_cd.iso /source_directory The options used in this example are as follows: . -r-Sets the permission of the files to more useful values. UID and GID (individual and group user ID requirements) are set to zero, all files are globally readable and searchable, and all files are set as executable (for Windows systems). . -v-Displays verbose messages (rather than terse messages) so that you can see what is occurring during the process; these messages can help you resolve problems if they occur. Burning CDs and DVDs in Ubuntu 175 . -J-Uses the Joliet extensions to ISO9660 so that your Windows-using buddies can more easily read the CD. The Joliet (for Windows), Rock Ridge (for Unix), and HSF (for Mac) extensions to the iso9660 standard are used to accommodate long filenames rather than the eight-character DOS filenames that the iso9660 standard supports. . -l-Allows 31-character filenames; DOS does not like it, but everyone else does. . -o-Defines the directory where the image will be written (that is, the output) and its name. The /tmp directory is convenient for this purpose, but the image could go anywhere you have write permissions. . /source_directory-Indicates the path to the source directory; that is, the directory containing the files you want to include. There are ways to append additional paths and exclude directories (and files) under the specified path-it is all explained in the man page, if you need that level of complexity. The simple solution is to construct a new directory tree and populate it with the files you want to copy, and then make the image using that directory as the source. Many more options are available, including options to make the CD bootable. After you have created the ISO image, you can write it to the CD with the cdrecord command: $ cdrecord -eject -v speed=12 dev=0,0,0 /tmp/our_special_cd.iso The options used in this example are as follows: . -eject-Ejects the CD when the write operation is finished. . -v-Displays verbose messages. 7 . speed=-Sets the speed; the rate depends on the individual drive's capabilities. If the drive or the recordable medium is poor, you can use lower speeds to get a good burn. . dev=-Specifies the device number of the CD writer (the number I told you to write down earlier). NOTE You can also use the blank= option with the cdrecord command to erase CD-RW disks. The cdrecord command has fewer options than mkisofs does, but it offers the -multi option, which enables you to make multisession CDs. A multisession CD enables you to write a data track, quit, and then add more data to the CD later. A single-session CD can be written to only once; any leftover CD capacity is wasted. Read about other options in the cdrecord man page. Current capacity for CD media is 700MB of data or 80 minutes of music. (There are 800MB/90 minute CDs, but they are rare.) Some CDs can be overburned; that is, recorded to a capacity in excess of the standard. The cdrecord command is capable of overburning if your CD-RW drive supports it. You can learn more about overburning CDs at http://www.cdmediaworld.com/hardware/cdrom/cd_oversize.shtml/. CHAPTER 7 Multimedia Applications 176 Creating DVDs from the Command Line There are several competing formats for DVD, and with prices rapidly falling, it is more likely that DVD-writing drives will become commonplace. The formats are as follows: . DVD+R . DVD-R . DVD+RW . DVD-RW Differences in the + and - formats have mostly to do with how the data is modulated onto the DVD itself, with the + format having an edge in buffer underrun recovery. How this is achieved impacts the playability of the newly created DVD on any DVD player. The DVD+ format also has some advantages in recording on scratched or dirty media. Most drives support the DVD+ format. As with any relatively new technology, your mileage may vary. We focus on the DVD+RW drives because most drives support that standard. The software supplied with Ubuntu has support for writing to DVD-R/W (rewritable) media as well. It will be useful for you to review the DVD+RW/+R/-R[W] for Linux HOWTO at http://fy.chalmers.se/~appro/linux/DVD+RW/ before you attempt to use dvd+rw-tools, which you need to install to enable DVD creation (also known as mastering) as well as the cdrtools package. You can ignore the discussion in the HOWTO about kernel patches and compiling the tools. TIP The 4.7GB size of DVD media is measured as 1000 megabytes per gigabyte, instead of the more commonly used 1024 megabytes per gigabyte, so do not be surprised when the actual formatted capacity, about 4.4GB, is less than you anticipated. dvd+rw-tools does not allow you to exceed the capacity of the disk. You need to have the dvd+rw-tools package installed (as well as the cdrtools package). The dvd+rw-tools package contains the growisofs application (that acts as a front end to mkisofs) as well as the DVD formatting utility. You can use DVD media to record data in two ways. The first way is much the same as that used to record CDs in a session, and the second way is to record the data as a true file system, using packet writing. Session Writing To record data in a session, you use a two-phase process: 1. Format the disk with dvd+rw-format /dev/scd0 (only necessary the first time you use a disk). 2. Write your data to the disk with growisofs -Z /dev/scd0 -R -J /your_files. Burning CDs and DVDs in Ubuntu 177 The growisofs command simply streams the data to the disk. For subsequent sessions, use the -M argument instead of -Z. The -Z argument is used only for the initial session record- ing; if you use the -Z argument on an already used disk, it erases the existing files. CAUTION Some DVDs come preformatted; formatting them again when you use them for the first time can make the DVD useless. Always be sure to carefully read the packaging your DVD comes in to ensure that you are not about to create another coaster! TIP Writing a first session of at least 1GB helps maintain compatibility of your recorded data with other optical drives. DVD players calibrate themselves by attempting to read from specific locations on the disk; you need data there for the drive to read it and cali- brate itself. Also, because of limitations to the ISO9660 file system in Linux, do not start new ses- sions of a multisession DVD that would create a directory past the 4GB boundary. If you do so, it causes the offsets used to point to the files to "wrap around" and point to the wrong files. Packet Writing Packet writing treats the CD or DVD disk like a hard drive in which you create a file system (like ext3) and format the disk, and then write to it randomly as you would to a conventional hard drive. This method, although commonly available on Windows-based computers, is still experimental for Linux and is not yet covered in detail here. 7 TIP DVD+RW media are capable of only about 1,000 writes, so it is very useful to mount them with the noatime option to eliminate any writing to update their inodes or simply mount them read-only when it's not necessary to write to them. It is possible to pipe data to the growisofs command: # your_application | growisofs -Z /dev/scd0=/dev/fd/0 It is also possible to burn from an existing image (or file, named pipe, or device): # growisofs -Z /dev/scd0=image The dvd+rw-tools documentation, found at /usr/share/doc/dvd+rw-tools-*/index.html, is required reading before your first use of the program. We also suggest that you experi- ment with DVD-RW (rewritable) media first, as if you make mistakes then you will still be able to reuse the disk, rather than creating several new coasters for your coffee mug. CHAPTER 7 Multimedia Applications 178 Viewing Video You can use Ubuntu tools and applications to view movies and other video presentations on your PC. This section presents some TV and motion picture video software tools included with the Ubuntu distribution you received with this book. TV and Video Hardware To watch TV and video content on your PC, you must install a supported TV card or have a video/TV combo card installed. A complete list of TV and video cards supported by Ubuntu is at http://www.exploits.org/v4l/. Freely available Linux support for TV display from video cards that have a TV-out jack is poor. That support must come from the X driver, not from a video device that Video4Linux supports with a device driver. Some of the combo TV-tuner/video display cards have support, including the Matrox Marvel, the Matrox Rainbow Runner G-Series, and the RivaTV cards. Many other combo cards lack support, although an independent developer might have hacked something together to support his own card. Your best course of action is to perform a thorough Internet search with Google. Many of the TV-only PCI cards are supported. In Linux, however, they are supported by the video chipset they use, and not by the name some manufacturer has slapped on a generic board (the same board is typically sold by different manufacturers under different names). The most common chipset is the Brooktree Bt*** series of chips; they are supported by the bttv device driver. If you have a supported card in your computer, it should be detected during installation. If you add it later, the Kudzu hardware detection utility should detect it and configure it. You can always configure it by hand. To determine what chipset your card has, use the lspci command to list the PCI device information, find the TV card listing, and look for the chipset that the card uses. For example, the lspci output for my computer shows $ lspci 00:00.0 Host bridge: Advanced Micro Devices [AMD] AMD-760 [IGD4-1P] System Con- troller (rev 13) 00:01.0 PCI bridge: Advanced Micro Devices [AMD] AMD-760 [IGD4-1P] AGP Bridge 00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 40) 00:07.1 IDE interface: VIA Technologies, Inc. VT82C586B PIPC Bus Master IDE (rev 06) 00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 1a) 00:07.3 USB Controller: VIA Technologies, Inc. USB (rev 1a) 00:07.4 SMBus: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 40) 00:09.0 Multimedia audio controller: Ensoniq 5880 AudioPCI (rev 02) 00:0b.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 02) 00:0b.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 02) 00:0d.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS) Viewing Video 179 00:0f.0 FireWire (IEEE 1394): Texas Instruments TSB12LV23 IEEE-1394 Controller 00:11.0 Network controller: Standard Microsystems Corp [SMC] SMC2602W EZConnect 01:05.0 VGA compatible controller: nVidia Corporation NV15 [GeForce2 Ti] (rev a4) Here, the lines listing the multimedia video controller and multimedia controller say that this TV board uses a Brooktree Bt878 Video Capture chip and a Brooktree Bt878 Audio Capture chip. This card uses the Bt878 chipset. Your results will be different, depending on what card and chipset your computer has. This card happened to be an ATI All-in-Wonder VE (also known as ATI TV-Wonder). (The VE means Value Edition; hence, there is no TV- out connector and no radio chip on the card; what a value!) The name of the chipset says that the card uses the bttv driver. In the documentation directory is a file named CARDLIST, and in that file is the following entry, among others: card=64 - ATI TV-Wonder VE There are 105 cards listed, as well as 41 radio cards, including card=0 - *** UNKNOWN/GENERIC *** which is what you could have used had you not known the manufacturer's name for the card. The file named Modules.conf, located in the same directory, offers the following example of information to place in the /etc/modules.conf file: $ i2c alias char-major-89 i2c-dev 7 options i2c-core i2c_debug=1 options i2c-algo-bit bit_test=1 $ bttv alias char-major-81 videodev alias char-major-81-0 bttv options bttv card=2 radio=1 options tuner debug=1 All you need do is enter this information into /etc/modules.conf and change the value for card=2 to card=64 to match your hardware. Youcan delete the reference to the radio card (radio=2) because there isn't one and leave the other values alone. Then you must execute $ sudo depmod -a to rebuild the modules dependency list so that all the modules are loaded automatically. When finished, all you need do is execute $ sudo modprobe bttv CHAPTER 7 Multimedia Applications 180 and your TV card should be fully functional. All the correct modules will be automatically loaded every time you reboot. Ubuntu is clever enough to detect and configure a supported TV card that is present during installation. TIP Other useful documentation can be found in /usr/src/linux- 2.6/Documentation/_video4linux. After you have identified a driver for a device, it does not hurt to look at the source code for it because so little formal documentation exists for many drivers; much of it is in the source code comments. The development of support for TV cards in Linux has coalesced under the Video4Linux project. The Video4Linux software provides support for video capture, radio, and teletext devices in Ubuntu. Video Formats Ubuntu recognizes a variety of video formats. The formats created by the MPEG group, Apple, and Microsoft dominate, however. At the heart of video formats are the codecs-the encoders and decoders of the video and audio information. These codecs are typically proprietary, but free codecs do exist. Here is a list of the most common video formats and their associated file extensions: . .mpeg-The MPEG video format; also known as .mpg . .qt-The QuickTime video format from Apple . .mov-Another QuickTime video format . .avi-The Windows audio visual format TIP An RPM that provides a Divx codec for Linux can be found at http://www.freshrpms. net/. Divx is a patented MPEG-4 video codec that is the most widely used codec of its type. It allows for compression of MPEG-2 video by a factor of 8. See http://www.divx. com/ for more information. The GetCodecs application is a Python script with a GUI interface that downloads, installs, and configures your Ubuntu system with multimedia codecs not provided by Ubuntu, such as MP3, Divx, and DVD codecs. The script can be obtained from http:/ /sourceforge.net/projects/getcodecs/. If you need to convert video from one format to another, you use encoder applications called grabbers. These applications take raw video data from a video device such as a camera or TV card, and convert it to one of the standard MPEG formats or to a still image format, such as JPEG or GIF. Ubuntu does not supply any encoder applications (other than Viewing Video 181 ppmtompeg, which encodes MPEG-1 video), but you can find them at http://www. freshrpms.net/ or another online source (see the "Reference" section at the end of this chapter). Viewing Video in Linux Out of the box, Ubuntu does not support any of the proprietary video codecs due to licensing restrictions. However this functionality can be restored if you install the full version of the applications described in this section from the Universe repository. There you can find multimedia applications such as Ogle, Xine, AlsaPlayer, Gstreamer, Grip, Mplayer, VCDImager, VideoLAN-client, Xmms, and Zapping. You can use Linux software to watch TV, save individual images (take snapshots) from a televised broadcast, save a series of snapshots to build animation sequences, or capture video, audio, or both. The following sections describe some of the ways in which you can put Linux multimedia software to work for you. You can watch MPEG and DVD video with Xine. Xine is a versatile and popular media player that is not included with Ubuntu. Xine is used to watch AVI, QuickTime, Ogg, and MP3 files (the latter is disabled in Ubuntu). Adobe Flash The Adobe Flash plug-in for the Firefox browser is a commercial multimedia application that isn't provided with Ubuntu out of the box, but many people find it useful. Adobe Flash enables you to view Flash content at websites that support it. The easiest way of getting hold of the official version of Flash is to install the flashplugin-nonfree pack- age either using apt-get or synaptic. Once you've done this, any flash animations will play quite happily within any Firefox-based browsers. 7 Another interesting video viewer application is MPlayer (not provided by Ubuntu), a movie player for Linux. MPlayer can use Win32 codecs and it supports a wider range of video formats than Xine, including Divx and some RealMedia files. MPlayer also uses some special display drivers that support Matrox, 3Dfx, and Radeon cards and can make use of some hardware MPEG decoder boards for better MPEG decoding. Look for Ubuntu packages at http://www.mplayerhq.hu; a Win32 codec package is also available, as well as other codec packages and a GUI interface. Personal Video Recorders The best reason to attach a television antenna to your computer, however, is to use the video card and the computer as a personal video recorder. The commercial personal video recorder, TiVo, uses Linux running on a PowerPC proces- sor to record television programming with a variety of customizations. TiVo has a clever interface and wonderful features, including a record/playback buffer, programmed record- ing and pause, slow motion, and reverse effects. Ubuntu does not provide any of the many applications that attempt to mimic the TiVo functionality on a desktop PC running CHAPTER 7 Multimedia Applications 182 Linux. However, several such applications, including DVR, The Linux TV Project, and OpenPVR, are listed at http://www.exploits.org/v4l/. These projects are in development and do not provide .rpm files, so you have to know how to download from CVS and compile your own binaries. For something a little easier, check out MythTV at http://www. mythtv.org/; a Ubuntu .rpm file should be available from ATRpms. Linux, TiVo, and PVRs Some TiVo users say that using this Linux-based device has changed their lives. Indeed, the convenience of using a personal video recorder (PVR) can make life a lot easier for inveterate channel surfers. Although PVR applications are not included with Ubuntu, open source developers are working on newer and better versions of easy-to- install and easy-to-use PVR software for Linux. For more information about TiVo, which requires a monthly charge and a phone line (or broadband connection with a newer TiVo2), browse to http://www.tivo.com/. Unrepentant Linux hardware hackers aiming to disembowel or upgrade a TiVo can browse to http://www.9thtee.com/tivoupgrades.htm or read the TiVo Hack FAQ at http://www.tivofaq.com/. A PVR makes viewing television a lot more fun! A number of Linux sites are devoted to PVR software development. Browse to the DVR project page at http://www.pierrox.net/dvr/. DVD and Video Players You can now easily play DVDs with Ubuntu as long as you install the appropriate soft- ware. (Ubuntu doesn't provide any.) Browse to http://www.videolan.org/, and then down- load, build, and install the vlc client. You must have a CPU of at least 450MHz and a working sound card to use a DVD player. The default Ubuntu kernel supports the DVD CD-ROM file system. As mentioned earlier, Xine and MPlayer do a great job of playing DVD files. NOTE The VideoLAN HOWTO found at http://videolan.org/ discusses the construction of a network for streaming video. Although you might not want to create a network, a great deal of useful information about the software and hardware involved in the enterprise can be generalized for use elsewhere, so it is worth a look. The site also contains a link to a HOWTO about cross-compiling on Linux to produce a Windows binary. Reference . http://www.cdcopyworld.com/-A resource for technical information about CD media and CD writers. . http://hardware.redhat.com/hcl/-A database of supported hardware. . http://www.opensound.com/download.cgi-The commercial OSS sound driver trial version download. Reference 183 . http://www.xmms.org/-Home to the Xmms audio player. . http://www.thekompany.com/projects/tkcoggripper/-A free (but not GPL) Ogg CD ripper. . http://faceprint.com/code/-An MP3 to Ogg converter named mp32ogg. . http://www.ibiblio.org/pub/linux/apps/sound/convert/!INDEX.html-Home to several sound conversion utilities. . http://linux-sound.org/-An excellent resource for Linux music and sound. . http://www.cnpbagwell.com/audio.html-The Audio Format FAQ. . http://www.icecast.org/-A streaming audio server. . http://www.linuxnetmag.com/en/issue4/m4icecast1.html-An Icecast tutorial. . http://linuxselfhelp.com/HOWTO/MP3-HOWTO-7.html-The MP3 HOWTO contains brief descriptions of many audio applications and, although it focuses on the MP3 format, the information is easily generalized to other music formats. . http://www.exploits.org/v4l/-Video for Linux resources. . http://fame.sourceforge.net/-Video encoding tools. . http://teletext.mb21.co.uk/faq.shtml-The Teletext FAQ. . http://xine.sourceforge.net/-Home of the Xine DVD/video player. . http://www.MPlayerHQ.hu/homepage/-Home to the MPlayer video player. . http://www.videolan.org/-A VideoLAN project with good documentation. 7 . http://fy.chalmers.se/~appro/linux/DVD+RW/-The DVD+RW/+R/-R[W] for Linux, a HOWTO for creating DVDs under Linux. . http://www.gimp.org-Home page of The GIMP (Gnu Image Manipulation Program. . http://f-spot.org-Home page of the F-Spot project. . http://www.linuxformat.co.uk-Website of Linux Format, home of a long-running GIMP tutorial by Michael J Hammel. . http://www.exif.org-More information on EXIF and how it is used in digital cameras. . http://www.sane-project.org-Home page of the SANE (Scanner Access Now Easy) project. . http://www.imagemagick.org-Home page for ImageMagick. . http://www.codeweavers.com-Home of the popular crossover office; required if you want to try to run Photoshop under Linux. . http://gimp.net/tutorials/-Official tutorials for The GIMP. This page intentionally left blank 8 CHAPTER IN THIS CHAPTER . Overview of Ubuntu Printing Printing with Ubuntu . Configuring and Managing Print Services . Creating and Configuring Local Printers . Reference F rom the word go, Ubuntu provides support for a huge range of printers from many different manufacturers. This chapter looks at how to get your printer connected and talking to Ubuntu, as well as at the software that Ubuntu uses to manage printers and print jobs. In keeping with most of the other Linux distributions, Ubuntu uses CUPS (Common Unix Printing System) to handle printers. Other systems are supported, such as LPRng, but you do not have access to some of the graphical manage- ment tools from within Ubuntu. The Internet Printing Protocol CUPS supports the Internet Printing Protocol, known as IPP, and offers a number of unique features, such as network printer directory (printer browsing) services, support for encryption, and support for PostScript Printer Description (.ppd) files. According to the Internet Engineering Task Force (IETF), IPP grew out of a 1996 proposal by Novell to create a printing protocol for use over the Internet. Since then, the system has been developed and has matured into a stable print system for use on a variety of Linux and Unix-like operating platforms. Overview of Ubuntu Printing Ubuntu's print filter system is the main engine that enables the printing of many types of documents. The heart of that CHAPTER 8 Printing with Ubuntu 186 engine is the GNU GPL version of Aladdin's Ghostscript interpreter, the gs client. The system administrator's printer configuration tool is the system-config-printer client. NOTE Ubuntu's print system can be used to print to local (attached) or remote (network) print- ers. If you use a local printer, it is represented by a printer device, such as /dev/lp0 or /dev/usb/lp0 (if you have a USB printer). Local and remote printers use print queues defined in your system's printer capabilities database, /etc/printcap. A docu- ment being printed is known as a print job, and you can view and control your list, or queue, of current print jobs in the spool directory, which is /var/spool/cups. Note that you may control only your print jobs; only the root operator can control print jobs of any user on the system. To add a printer to your system, you use the system-config-printer client to create, configure, and save the printer's definition. CUPS maintains its own database of defined printers under the /etc/cups directory in a file named printers.conf. For example, an associated printer defined in /etc/printcap previously might have the following entry in /etc/cups/printers.conf: <DefaultPrinter lp> Info Created by system-config-printer 0.7.x DeviceURI parallel:/dev/lp0 Location HP P135 local printer State Idle Accepting Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 </Printer> This example shows the definition for the printer named lp, along with its associated device, description, state, and other information. The various possible fields and entries in this file are documented in the printer.conf man page. CUPS uses a print server (daemon) named cupsd, also called a scheduler in the CUPS docu- mentation. The server can be controlled, like other Ubuntu services, by the /etc/init.d/cupsys command or system-config-services client. How the server works on a system is determined by settings in its configuration file, cupsd.conf, found under the /etc/cups directory. CUPS executables are found under the /usr/lib/cups directory. The cupsd.conf man page documents more than 80 different settings for the server, which you can configure to match your system, network, or printing environment. Default CUPS-related files and directories are stored under the /usr/share/cups directory. Logging can be set to seven different levels, with information about access and errors stored in log files under the /var/log/cups directory. Configuring and Managing Print Services 187 Resource requirements can be tailored through other settings, such as MaxCopies to set the maximum number of copies of a print job by a user, MaxJobs to set a limit on the number of active print jobs, and MaxJobsPerUser to set a limit on the number of active jobs per user. The RIPCache setting (8MB by default) controls the amount of memory used for graphics cache during printing. For example, if you want to limit printing to 20 copies of a document or page at a time and only 10 simultaneous print jobs per user, use settings such as MaxCopies 20 MaxJobsPerUser 10 TIP Don't forget to restart the CUPS server after making any changes to its configuration file. Changes are activated only when the service is restarted (when the daemon rereads its configuration file). See the "GUI-Based Printer Configuration Quickstart" section later in this chapter. Configuring and Managing Print Services Your task as a system administrator (or root operator of your workstation) is to properly define local or remote printers and to ensure that printing services are enabled and running properly. Fortunately, Ubuntu includes a graphical print service configuration tool that makes this job easy. You should use these tools to configure printing, as you learn in this section of the chapter. But first, take a moment to read through a quick overview of the configuration process. You can configure printing services using the system-config-printer graphical interface. Most of the detailed information in this chapter refers to the use of the GUI. The overview 8 sections that follow, however, give you a solid foundation in both configuration approaches. You learn the details of these processes in later sections of the chapter. GUI-Based Printer Configuration Quickstart Configuring a printer for Ubuntu is easy using the system-config-printer tool, found under System, Administration, Printing. If you're not sure whether cupsd is running, you can quickly drop to a terminal and use the /etc/init.d/cupsys command with the status keyword like so: $ sudo /etc/init.d/cupsys status You will see either Status of Common Unix Printing System: cupsd is not running. CHAPTER 8 Printing with Ubuntu 188 or, if cupsd is running, an acknowledgement such as Status of Common Unix Printing System: cupsd is running. If cupsd is installed but not running, start the daemon like so: $ sudo /etc/init.d/cups start to access the GUI select System, Administration, Printing. You then simply follow the prompts to define your printer and add local or remote print- ing services. You should print a test page before saving your changes. Use the printer configuration client or the File menu's Print menu item from a GNOME or KDE client. NOTE The system-config-printer utility is a replacement for gnome-cups-manager, which was previously the default printer configuration tool for Ubuntu. This new utility was actually originally developed for Fedora and has been adopted by Ubuntu. Managing Printing Services After defining a printer, you can use the command line to view and control your print jobs, or if root, all print jobs and printers on your system. Table 8.1 contains a partial list of CUPS and related printing commands and drivers included with Ubuntu. TABLE 8.1 Print-Related Commands and Drivers Name Description Formats text files for PostScript printing a2ps Controls CUPS print job destinations accept Cancels a CUPS print job cancel Controls CUPS printers disable Converts TeX DVI files to specific PCL format dvi[lj, lj4l, lj2p, lj4] Controls CUPS printers enable Converts text files to PostScript encscript Epson Stylus inkjet printer utility escputil Most Linux systems use PostScript as the default document format for printing. Ubuntu uses the gs command along with CUPS to manage local and remote print jobs and the type of data transferred during a print job. The gs command is used to translate the document stream into a format accepted by the destination printer (which most likely uses HPCL). You can use the Ghostscript interpreter gs to display its built-in printer devices by using the gs interpreter with its --help command-line option like this: # gs --help Creating and Configuring Local Printers 189 NOTE Ubuntu includes graphical clients you can use to view many different types of docu- ments. For example, to display PostScript documents (including compressed PostScript documents) or PostScript images, use the gv client. To display Portable Document Format (PDF) documents, you can use gv or the xpdf client. The gs command outputs many lines of help text on command-line usage and then lists built-in printer and graphics devices. Another way to get this information is to start gs and then use the devicenames == command like this: # gs GPL Ghostscript SVN PRE-RELEASE 8.61 (2007-08-02) Copyright (C) 2007 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. GS>devicenames == [/epson /pnggray /lp3000c /epl2050 /pgnm /ljet4d\ /cljet5pr /pbmraw /lips4v /cdj550 /mag16 /laserjet\ /bj200 /dfaxhigh /ibmpro /alc8500 /bmpgray\ /hpdj600 /tiffgray /hpdj310 /pswrite\ ... Not all the devices are listed in this example. Aladdin or GNU? At least two versions of Ghostscript are available for Linux. One version is named AFPL 8 Ghostscript, which formerly went by the name Aladdin Ghostscript. This version is licensed under the Aladdin Free Public License, which disallows commercial distribu- tion. The other version is called GNU Ghostscript, which is distributed under the GNU General Public License. For details about the different versions or for answers to ques- tions regarding licensing, see the Ghostscript home page at http://www.cs.wisc.edu/ ~ghost/. Creating and Configuring Local Printers Creating a local printer for your Ubuntu system can be accomplished in a few easy steps. The cupsd daemon should also be running before you begin (start the daemon manually as shown earlier in this chapter). To launch system-config-printer, go to System, Administration and choose the Printing menu option. CHAPTER 8 Printing with Ubuntu 190 Creating the Print Queue The Ubuntu system-config-printer tool walks you through a process to create a new printer. To begin configuration of a local (attached) printer, click the New Printer toolbar button in system-config-printer's main window.The first screen that appears allows you to choose the type of connection that the printer will use, as shown in Figure 8.1. Select the connection type that is appropriate for you. You can select a number of different connection types, depending on your specific requirements. Normally you will use the LPT#1 option if your printer is connected by a standard Parallel (or what used to be called Centronics) cable. Alternatively, if you are connecting to a printer that has a JetDirect port (most HP network-capable printers fit in this category) then select the appropriate option and enter the network address for the printer. FIGURE 8.1 Select the appropriate connection method for your printer and enter the relevant details. Next you need to select the make/manufacturer of the printer that you are setting up, shown in Figure 8.2. Note that you can configure a printer for Ubuntu even if it is not attached to your computer. After you select your printer's manufacturer, a list of printers from that manu- facturer (such as HP, as shown in Figure 8.3) appears. Select your printer from the list, and then click the Forward button. Do not worry if you do not see your printer listed in the selection; it is possible to select a related, although different, printer model and still be able to print to your printer. For example, many HP printers can be used by selecting the DeskJet 500 for monochrome or 500C model for color printing. Creating and Configuring Local Printers 191 FIGURE 8.2 Select the make or manufacturer of your printer from this dialog box to help Ubuntu narrow down the driver options. 8 FIGURE 8.3 Select your printer from the list and click the Forward button to continue the configuration. NOTE You can also browse to http://www.linuxprinting.org/ to find out what drivers to use with your printer or to see a cross-referenced listing of printers supported by each dri- ver. You might also find new and improved drivers for the latest printers on the market. CHAPTER 8 Printing with Ubuntu 192 You can experiment to see which printer selection works best for your printer if its model is not listed. You might not be able to use all the features of your printer, but you will be able to set up printing service. Click Next when you have made your choice. Now you can name the printer and give it a description and location as shown in Figure 8.4. The name is important, as this will be what the users see when they print. The description and location are optional, but Ubuntu autofills your location with the host- name of your computer. FIGURE 8.4 Give your printer a meaningful name, and if you want, a description and location. If you are happy with the details, click the Apply button to commit your changes to the system. You can see the new printer defined in the system-config-printer main window as shown in Figure 8.5. Editing Printer Settings You also use the system-config-printer tool to edit the newly defined printers. To edit the printer settings, highlight the printer's listing in the printer browser window. You can then select specific settings related to that printer by using the tabs that appear in the right side of the dialog box. The Settings dialog is shown in Figure 8.6. The first tab in this dialog enables you to assign a new name for the printer. In this example, the printer has the name OfficeJet. Other tabs in this dialog enable you to change the queue type or queue options (such as whether to print a banner page or set Creating and Configuring Local Printers 193 FIGURE 8.5 New printer entries displayed in system-config-printer's main window. 8 FIGURE 8.6 Edit a printer's settings by using tabs in system-config-printer. CHAPTER 8 Printing with Ubuntu 194 the image area of a page), to select or update the driver, or to choose available print options for the printer (shown in Figure 8.7). FIGURE 8.7 A printer's policy options can be changed on the Policies tab of system- config-printer. When you finish editing your printer click the Apply button to save your changes and automatically restart the cupsd daemon. This step is extremely important; you have to update the printer settings and restart the cupsd daemon to force it to reread your new settings. Click Quit from the File menu when finished. Related Ubuntu and Linux Commands The following commands help you manage printing services: . accept-Controls print job access to the CUPS server via the command line . cancel-Cancels a print job from the command line . cancel-Command-line control of print queues . disable-Controls printing from the command line . enable-Command-line control CUPS printers . lp-Command-line control of printers and print service . lpc-Displays status of printers and print service at the console . lpq-Views print queues (pending print jobs) at the console . lprm-Removes print jobs from the print queue via the command line . lpstat-Displays printer and server status . system-config-printer-Ubuntu's graphical printer configuration tool Reference 195 Reference . http://www.linuxprinting.org/-Browse here for specific drivers and information about USB and other types of printers. . http://www.hp.com/wwsolutions/linux/products/printing_imaging/index.html-Short but definitive information from HP regarding printing product support under Linux. . http://www.cups.org/-A comprehensive repository of CUPS software, including versions for Ubuntu. . http://www.pwg.org/ipp/-Home page for the Internet Printing Protocol standards. . http://www.linuxprinting.org/cups-doc.html-Information about the Common UNIX Printing System (CUPS). . http://www.cs.wisc.edu/~ghost/-Home page for the Ghostscript interpreter. 8 This page intentionally left blank 9 CHAPTER IN THIS CHAPTER . Linux Gaming Games . Installing Games for Ubuntu . Playing Windows Games with Cedega . Reference Whether your boss likes it or not, gaming is a huge part of computing. For any operating system to have true mass market appeal, it must have the ability to play games. From the humble card games that entertain millions during their coffee breaks, to the heavily involved first-person shooters that involve players dotted around the globe, Linux offers a gaming platform that may surprise even the hardened Windows fanboy. In this chapter we'll explore some of the common games available for you to download and install. We'll even show you how to get your Windows-based games running under Linux. Linux Gaming A number of games come as part of Ubuntu, and they are divided into three distinct camps: KDE games, GNOME games, and X games. Our favorites are Planet Penguin Racer and Torc (see Figure 9.1), but there are a few others for you to choose from. The best part, of course, is trying each one and seeing what you think. Many other free games are available across the Web, so go to Google and see what you come up with. However, games for Linux do not stop there-a few versions of popular Windows-based games have been across to the Linux platform, including DOOM 3, Unreal Tournament 2004, and Quake 4. These three popular games have native Linux support and in some cases can run at similar, if not better, speeds than their Windows counterparts. There's CHAPTER 9 Games 198 even an emulator available that enables you to play classic adventure games, such as the Secret of Monkey Island, natively under Linux. FIGURE 9.1 Sliding around corners in the high-speed Torc. Finally, an implementation of the Wine code called Cedega is optimized especially for games. This uses application interfaces to make Windows games believe they are running on a Windows platform and not a Linux platform. Bear in mind that Wine stands for wine is not an emulator, so do not start thinking of it as such-the community can get quite touchy about it! A major gripe of Linux users has been the difficulty involved in getting modern 3D graph- ics cards to work. Thankfully, both AMD/ATI and Nvidia support Linux, albeit by using closed-source drivers. This means that Ubuntu does not ship with native 3D drivers acti- vated for either graphics card. Installing Proprietary Video Drivers Unfortunately, both Nvidia and AMD/ATI still produce proprietary drivers, meaning that the source code is not open and available for developers to look at. This means that it is hard for some Linux distros to include them as part of their standard package manifest. However, Ubuntu have taken the pragmatic approach of including both Nvidia and AMD/ATI drivers within the main Ubuntu distro, albeit disabled by default. That way the end user can, if they so wish, activate those drivers to take advantage of them. Installing Games in Ubuntu 199 NOTE Don't think that proprietary drivers are the only way on Linux, as there is a lot of devel- opment going into providing totally free and open source drivers for slightly older graph- ics cards. Ubuntu will automatically select the best "free" driver for your system and allow you to switch the proprietary driver should you want to. Although the open source drivers will provide 3D acceleration, this support doesn't always extend to the more recent graphics cards. It's very easy to activate the proprietary driver if you need to; all you have to do is use the Hardware Drivers Manager found under System, Administration and which is shown in Figure 9.2. FIGURE 9.2 Use the Hardware Drivers Manager to activate or deactivate the appropriate proprietary graphics driver for your graphics card. You will be prompted for your password before you proceed, as you will be setting a system-wide option. Once the Hardware Drivers Manager has opened up, look for the entry that says ATI (or Nvidia) Accelerated Graphics Driver and check the box. Ubuntu will confirm that you want to use the proprietary driver and, if you agree, will automati- cally download and configure the relevant driver. In order to activate the driver you will need to log out of GNOME by going to System, Log Off. The next time you log in, Ubuntu will automatically switch to the proprietary driver. Installing Games in Ubuntu In this section we'll take a look at how to install some of the more popular games for Ubuntu. Alongside the usual shoot-'em-up games, you'll also find one or two strategy- focused titles. CHAPTER 9 Games 200 DOOM 3 The follow-up to the infamous DOOM and DOOM II was released in the second half of 2004 (see Figure 9.3), and it provides a way to run it under Linux. Although it's almost four years old it is still an impressive game in its own right. You still have to purchase the Windows version because you need some of the files that are on the CDs. The rest of the files are available from id Software at http://zerowing.idsoftware.com/linux/doom. FIGURE 9.3 Descending into the pits of hell. DOOM 3 is one of the most graphic computer games available. You can download the file doom3-linux-1.1.1286-demo.x86.run from the id Software FTP server or by using BitTorrent. When that's finished, open a terminal and change to the directory in which you saved the file. Type the following command_FIRST: $ sudo sh doom3-linux-*.run This begins the installation of the demo. As with other commercial games, you must agree to an EULA before you can install. Follow the installation procedure. When it finishes, you need to get the Windows CDs ready. The files you need to copy across are the following: . pak000.pk4 . pak001.pk4 . pak002.pk4 . pak003.pk4 . pak004.pk4 Installing Games in Ubuntu 201 They must be saved in the /usr/local/games/doom3/base/ directory. After you copy the files, you can start the game by typing doom3 or start the dedicated server for multiplayer games by typing doom3-dedicated. Unreal Tournament 2004 Unreal Tournament 2004 (or UT2004, as it is affectionately known) from Epic natively supports Linux in both its 32-bit and 64-bit incarnations (see Figure 9.4). Be aware that if you run the 64-bit version, you need to ensure that your graphics drivers are supported under 64-bit mode. FIGURE 9.4 Unreal Tournament 2004 builds on the classic deathmatch scenario with more enemies and more combatants! Installation is easy, and there are two ways to do it. You can insert the DVD and mount it, or you can open the DVD in GNOME and double-click the linux-installer.sh icon. When you are asked whether you want to run it or display its contents, click Run in Terminal to launch the graphical installer. As with DOOM 3, you must read and accept the terms of the EULA before you are allowed to install UT2004. You are given the option of where you want to install the software; the default is in your home directory. After you select the destination directory, click Begin Install; UT2004 does the rest. CHAPTER 9 Games 202 The alternative way to access the graphical installer is via the command line. Change directory to /media/cdrom/ and type the following_FIRST: $ sudo sh linux-install.sh This brings up the installer. Continue through this and, when finished, you should find Unreal Tournament 2004 in /home/username/ut2004. If you want to uninstall UT2004, you can use the uninstall script in the ut2004 directory. Type this_FIRST: $ sudo sh uninstall.sh After confirmation, Unreal Tournament removes itself from your system. Quake 4 Being based on the DOOM 3 engine, you could almost expect Quake 4 (seen in Figure 9.5) to ship with a good deal of support for Linux. To get started, you must have the Windows version of the software because you need several files as well as the CD key to be able to play the game. First things first, though. Head on over to http://zerowing.idsoftware.com/ linux/quake4/ to download the required Linux installer (quake4-linux-1.0*.run) by either direct FTP or the more bandwidth-friendly BitTorrent. FIGURE 9.5 Based on the popular DOOM 3 engine, Quake 4 pits you against the evil Strogg. Get out there and frag 'em! Installing Games in Ubuntu 203 After you download the file, drop down to a command line and type the following:[[STYLE_FIRST]] $ sudo sh quake4-linux-1.0*.run Then press Enter. The installer starts up and asks you a couple questions. After you answer these, the installer creates the necessary files and folders. All you need to do is to copy several files from the /quake4/qbase directory on the DVD to /usr/local/bin/quake4/qbase. You can start the game by typing quake4 at a command prompt. Wolfenstein: Enemy Territory Whereas the earlier Return to Castle Wolfenstein was both single- and multiplayer, the freely available Wolfenstein: Enemy Territory is multiplayer only (see Figure 9.6). Available in Win32 and Linux native versions, you can download it from http://www. SplashDamage.com/. After you download the 260MB file named et-linux-2.55.x86.run, install the game by typing the following: $sudo sh et-linux-2.55.x86.run FIGURE 9.6 Teamwork is the key to victory in this lush but hostile graphical environment. CHAPTER 9 Games 204 Then accept the defaults. A symlink exists in /usr/local/bin to the script that loads the game. Battle for Wesnoth Of course, there is more to Linux gaming than just first-person shooters. One of the most popular games currently available for Linux is Battle for Wesnoth (see Figure 9.7), a strat- egy game much in the vein of Age of Empires. Based in a fantasy land, you are responsible for building armies to wage war against your foes. FIGURE 9.7 Flex your strategic brain by playing Battle for Wesnoth-a rich and full land of fantasy of adventure Battle for Wesnoth is easy to install with Ubuntu. You need to select the wesnoth package using either synaptic or aptitude. When installed, you launch it from the command line by entering the following: $ wesnoth Playing Windows Games with Cedega As mentioned earlier, the key to mass-market appeal of an operating system is in the applications available for it. A group of developers saw that the vast majority of the computing world was using Windows-based productivity and gaming software and Reference 205 decided to develop a way to run this software on Linux, thereby giving Linux users access to this large application base. The developers came up with a program called Wine, which has been updated regularly and forms the basis of the gaming variant called Cedega. This is a commercial product available from developers TransGaming Technologies (http:/ /www.transgaming.com/), so you cannot retrieve it using aptitude. However, Cedega is a popular and up-to-date product with support for recent releases such as Elder Scrolls IV: Oblivion and World of Warcraft. Because the state of Cedega is constantly changing, TransGaming Technologies has a subscription service, which means that you get updates for the code when they are released-ensuring that you are able to enjoy not only the games of today, but also those of tomorrow. So, if you cannot wait for Linux to become more popular with game developers, use Cedega as a stop-gap until they can be persuaded to support Linux directly. TIP The keys to successful gaming in Linux are to always read the documentation thorough- ly, always investigate the Internet resources thoroughly, and always understand your system. Installing games is a great way to learn about your system because the reward of success is so much fun. Reference . http://www.transgaming.com/-The official TransGaming Technologies website provides details of games that are directly supported under Cedega. . http://www.linuxgames.com/-A good source of up-to-date information about the state of Linux gaming. . http://zerowing.idsoftware.com/linux/doom/-Includes a complete how-to and trou- bleshooting guide for running DOOM 3 under Linux. . http://www.unrealtournament.com/-The official site of Unreal Tournament. . http://www.nvnews.net/vbulletin/forumdisplay.php?f=14-The Official Nvidia Linux driver support forum. . http://www.nvidia.com/object/linux.html-Home page for the Nvidia Linux drivers. . http://tinyurl.com/3pm2v-Home page for the ATI Linux drivers (courtesy of tinyurl.com). This page intentionally left blankPART III System Administration IN THIS PART Managing Users CHAPTER 10 Automating Tasks CHAPTER 11 system-Monitoring Tools CHAPTER 12 Backing Up CHAPTER 13 Networking CHAPTER 14 Remote Access with SSH and CHAPTER 15 Telnet This page intentionally left blank 10 CHAPTER IN THIS CHAPTER . User Accounts Managing Users . Managing Groups . Managing Users . Managing Passwords . Granting System Administrator Privileges to Regular Users If it weren't for users then system administrators would . Disk Quotas have a quiet life! However, it's impossible for you have a . Reference system with absolutely no users, so it is important that you learn how to effectively manage and administer your users as they work with your system. Whether you are creating a single user account or modifying a group that holds hundreds of user accounts, the fundamentals of user admin- istration are the same. User management and administration includes looking after allocating and managing home directories, putting in place good password policies and applying an effective security policy including disk quotas and file and directory access permissions. We will take a look at all of these areas within this chapter, as well as taking a look at the different types of user that you are likely to find on an average Linux system. User Accounts You can normally findthree types of users on all Linux systems: the super user, the day to day user and the system user. Each type of user is essential to the smooth running of your system and learning the differences between the three is essential if you are to work efficiently and safely within your Linux environment. All users who access your system must have accounts on the system itself. Ubuntu uses the /etc/passwd file to store information on the user accounts that are present on the system. All users, regardless of their type, have a one line entry in this file which contains their username (typically used for logging in to the system), a password field (which CHAPTER 10 Managing Users 210 contains an x to denote that a password is present), a User ID (commonly referred to as the UID) and a Group ID (commonly referred to as the GID). The last two fields show the location of the home directory (usually /home/username) and the default shell for the user (/bin/bash is the default for new users). NOTE Just because the password field contains an x doesn't mean that this is your pass- word! All passwords are actually encrypted and stored in /etc/shadow for safe keep- ing. Ubuntu automatically refers to this file whenever a password is required. In keeping with other UNIX-based operating systems, Linux and Ubuntu make use of the established UNIX file ownership and permission system. All files (which can include direc- tories and devices) can be assigned one or more of read, write and/or execute permissions. These three 'flags' can also be assigned to the owner of the file, a member of a group or anyone on the system. The security for a file is drawn from these permissions and also file ownership. As the system administrator (more commonly referred to as the super user) it is your responsibility to manage these settings effectively and ensure that the users have proper UIDs and GIDS. Perhaps most importantly you will need to lock away sensitive files from users who should not have access to them, through file permissions. The Super User/Root User No matter how many system administrators there are for a system, there can ever only be one super user account. The super user account, more commonly referred to as the root user, has total and complete control over all aspects of the system. They can go anywhere in the filesystem, grant and revoke access to files and directories, and can carry out any operation on the system, including destroying it if they so wish. The root user is unique in that it has a UID of 0 and GID of 0. As you can probably guess by now, the root user has supreme power over your system. With this in mind, it's important that you do not work as root all the time as you may inadvertently cause serious damage to your system, perhaps even making it totally unus- able. Instead, you should rely on root only when you need to make specific changes to your system that require root privileges. As soon as you've finished your work you can switch back to your normal user account to carry on working. Within Ubuntu you execute a command with root privileges by way of the sudo command like so: $sudo apt-get update You will be prompted for your password so you should enter this. Ubuntu will then carry out the command (in this case updating information about available software) as if you were running it as root. User Accounts 211 The Root User If you've used other Linux distros then you are likely to be a little puzzled by the use of the sudo command. In short, Ubuntu allows the first user on the system access to full root privileges through the sudo command. It also disables the root account so no one can actually login with the username root. In other Linux distros you would change to the root user by issuing the command su - followed by the root password. This will land you at the root prompt, which is shown as a pound sign (#). From here you are able to execute any com- mand you wish. To get to a root prompt in Ubuntu you need to execute the command sudo -i which, after you enter your password, will give you the prompt so familiar to other Linux distros. When you've finished working as root just type exit and hit Enter to get back to a normal user prompt ($). A regular user is someone who logs on to the system to make use of it for nonadministra- tive tasks such as word processing or email. These users do not need to make systemwide changes or manage other users. However, they might want to be able to change settings specific to them (for instance, a desktop background). Of course, depending on how draconian the root user is, regular users might not even be able to do that! The super user grants privileges to regular users by means of file and directory permissions (as covered in Chapter 4, "Command Line Quickstart"). For example, if the super user does not want you to change your settings in ~/.profile (the ~ is a shell shortcut repre- senting your home directory), root can alter the permissions so that you may read from, but not write to, that file. CAUTION Because of the potential for making a catastrophic error as the super user (using the command rm -rf /* is the classic example, but do not ever try it!), always use your system as a regular user and become root only temporarily to do sysadmin duties. While you are on a multiuser system, consider this advice an absolute rule; if root were to delete the wrong file or kill the wrong process, the results could be disastrous for the business. On your home system, you can do as you please, and running as root makes many things easier, but less safe. In any setting, however, the risks of running as root are significant and we cannot stress how important it is to be careful when working as root. The third type of user is the system user. The system user is not a person, but rather an administrative account that the system uses during day-to-day running of various services. For example, the system user named apache owns the apache web server and all the asso- ciated files. Only itself and root can have access to these files-no one else can access or make changes to these files. System users do not have a home directory or password, nor do they permit access to the system through a login prompt. CHAPTER 10 Managing Users 212 You will find a list of all the users on a system in the /etc/passwd file. Ubuntu refers to these users as the standard users because they are found on every Ubuntu computer as the default set of system (or logical) users provided during the initial installation. This "stan- dard" set differs among Linux distributions. User IDs and Group IDs A computer is, by its very nature, a number-oriented machine. It identifies users and groups by numbers known as the user ID (UID) and group ID (GID). The alphabetic names display on your screen just for the your ease of use. As previously mentioned, the root user is UID 0. Numbers from 1 through 499 and 65,534 are the system, or logical, users. Regular users have UIDs beginning with 1,000; Ubuntu assigns them sequentially beginning with this number. With only a few exceptions, the GID is the same as the UID. Ubuntu creates a private GID for every UID of 1,000 and greater. The system administra- tor can add other users to a GID or create a totally new group and add users to it. Unlike Windows NT and some UNIX variants, a group cannot be a member of another group in Linux. File Permissions As you learned in Chapter 4, permissions are of three types: read, write, and execute (r, w, x). For any file or directory, permissions can be established in three categories: user, group, and global. In this section, we focus on group permissions, but there is a highlight of the commands used to change the group, user, or access permissions of a file or direc- tory: Seth . chgrp-Changes the group ownership of a file or directory . chown-Changes the owner of a file or directory . chmod-Changes the access permissions of a file or directory These commands, which modify file ownerships and permissions, can be used to model organizational structures and permissions in the real world onto your Ubuntu system (see the next section, "Managing Groups"). For example, a human resources department can share health-benefit memos to all company employees by making the files readable (but not writable) by anyone in an accessible directory. On the other hand, programmers in the company's research and development section, although able to access each other's source code files, would not have read or write access to HR pay-scale or personnel files (and certainly would not want HR or marketing poking around R&D). These commands are used to easily manage group and file ownerships and permissions from the command line. It is essential that you know these commands because sometimes you might have only a command-line interface to work with; perhaps some idiot system administrator set incorrect permissions on X11, for example, rendering the system inca- pable of working with a graphical interface. Managing Groups 213 User Stereotypes As is the case in many professions, exaggerated characterizations (stereotypes or caricatures) have emerged for users and system administrators. Many stereotypes contain elements of truth mixed with generous amounts of hyperbole and humor and serve to assist us in understanding the characteristics of and differences in the stereo- typed subjects. The stereotypes of the "luser" and the "BOFH" (users and administra- tors, respectively) also serve as cautionary tales describing what behavior is acceptable and unacceptable in the computing community. Understanding these stereotypes allows you to better define the appropriate and inap- propriate roles of system administrators, users, and others. You can find a good refer- ence for both at Wikipedia: http://en.wikipedia.org/wiki/BOFH and http://en.wikipedia. org/wiki/Luser. Managing Groups Groups can make managing users a lot easier. Instead of having to assign individual permissions to every user, you can use groups to grant or revoke permissions to a large number of users quickly and easily. Setting group permissions allows you to set up work- spaces for collaborative working and to control what devices can be used, such as external drives or DVD writers. This approach also represents a secure method of limiting access to system resources to only those users who need them. As an example, the sysadmin could put the users andrew, paul, michael, bernice, mark, and john in a new group named unleashed. Those users could each create files intended for their group work and chgrp those files to unleashed. Now, everyone in the unleashed group-but no one else except root-can work with those files. The sysadmin would probably create a directory owned by that group so that its members could have an easily accessed place to store those files. The sysadmin could also add other users such as bernice and ildiko to the group and remove existing users when their part of the work is done. The sysadmin could make the user andrew the group administrator so that andrew could decide how group membership should be changed. You could also put restrictions on the DVD writer so that only andrew could burn DVDs, thus protecting sensitive material from falling into the wrong hands. Different UNIX operating systems implement the group concept in various ways. Ubuntu uses a scheme called UPG, the user private group, in which all users are assigned to a group with their own name by default. (The user's username and group name are identical.) All the groups are listed in /etc/group file. Here is a partial list of a sample /etc/group file: $ sudo cat /etc/group CHAPTER 10 Managing Users 214 root:x:0: daemon:x:1: bin:x:2: sys:x:3: mail:x:8: news:x:9: ... gdm:x:111: andrew:x:1000: admin:x:112:andrew This example contains a number of groups, mostly for services (mail, news, and so on) and devices (floppy, disk, and so on). As previously mentioned, the system services groups enable those services to have ownership and control of their files. For example, adding postfix to the mail group, as shown previously, enables the postfix application to access mail's files in the manner that mail would decide for group access to its file. Adding a regular user to a device's group permits the regular user to use the device with permissions granted by the group owner. Adding user andrew to the group cdrom, for example, would allow andrew to use the optical drive device. You learn how to add and remove users from groups in the next section. Group Management Tools Ubuntu provides several command-line tools for managing groups, but also provides graphical tools for such. Many experienced sysadmins prefer the command-line tools because they are quick and easy to use and can be included in scripts if the sysadmin desires to script a repetitive task. Here are the most commonly used group management command-line tools: . groupadd-This command creates and adds a new group. . groupdel-This command removes an existing group. . groupmod-This command creates a group name or GIDs but doesn't add or delete members from a group. . gpasswd-This command creates a group password. Every group can have a group password and an administrator. Use the -A argument to assign a user as group administrator. . useradd -G-The -G argument adds a user to a group during the initial user creation. (More arguments are used to create a user.) . usermod -G-This command allows you to add a user to a group so long as the user is not logged in at the time. . grpck-A command for checking the /etc/group file for typos. Managing Groups 215 As an example, there is a DVD-RW device (/dev/scd0) on our computer that the sysadmin wants a regular user named john to have access to. To grant john that access, we would follow these steps: 1. Add a new group with the groupadd command: # groupadd dvdrw 2. Change the group ownership of the device to the new group with the chgrp command: # chgrp dvdrw /dev/scd0 3. Add the approved user to the group with the usermod command: # usermod -G dvdrw john 4. Make user john the group administrator with the gpasswd command so that she can add new users to the group: # gpasswd -A john Now, the user john has permission to use the DVD-RW drive, as would anyone else added to the group by the super user or john because she is now also the group administrator and can add users to the group. The sysadmin can also use the graphical interface that Ubuntu provides, as shown in Figure 10.1. It is accessed under System, Administration as the Users and Groups entry. FIGURE 10.1 Use the manage groups option to allow you to assign users to groups. CHAPTER 10 Managing Users 216 Note that the full set of group commands and options are not available from the graphical interface, limiting the usefulness of the GUI to a subset of the most frequently used commands. You learn more about using the Ubuntu User Manager GUI in the next section of this chapter. Managing Users We have mentioned users previously, but in this section we look at how the sysadmin can actually manage the users. Users must be created, assigned a UID, provided a home direc- tory, provided an initial set of files for their home directory, and assigned to groups so that they can use the system resources securely and efficiently. The system administrator might elect to restrict a user's access not only to files, but to the amount of disk space they use, too. User Management Tools Ubuntu provides several command-line tools for managing users, but also provides graphi- cal tools too. Many experienced sysadmins prefer the command-line tools because they are quick and easy to use and they can be included in scripts if the sysadmin prefers to script a repetitive task. Here are the most frequently used commands used to manage users: . useradd-This command is used to add a new user account to the system. Its options permit the sysadmin to specify the user's home directory and initial group or to create the user with the default home directory and group assignments. . useradd -D-This command sets the system defaults for creating the user's home directory, account expiration date, default group, and command shell. See the specific options in man useradd. Used without any arguments, it displays the defaults for the system. The default set of files for a user are found in /etc/skel. NOTE The set of files initially used to populate a new user's home directory are kept in /etc/skel. This is convenient for the system administrator because any special files, links, or directories that need to be universally applied can be placed in /etc/skel and will be duplicated automatically with appropriate permissions for each new user. $ ls -al /etc/skel total 20 drwxr-xr-x 2 root root 4096 2007-08-09 00:59 . drwxr-xr-x 111 root root 4096 2007-08-20 09:54 .. Managing Users 217 -rw-r--r-- 1 root root 220 2007-05-17 12:59 .bash_logout -rw-r--r-- 1 root root 2298 2007-05-17 12:59 .bashrc lrwxrwxrwx 1 root root 26 2007-08-13 19:42 Examples \ -> /usr/share/example-content -rw-r--r-- 1 root root 566 2007-05-17 12:59 .profile Each line provides the file permissions, the number of files housed under that file or directory name, the file owner, the file group, the file size, the creation date, and the filename. As you can see, root owns every file here, but the adduser command (a symbolic link to the actual command named useradd) copies everything in /etc/skel to the new home directory and resets file ownership and permissions to the new user. Certain user files might exist that the system administrator doesn't want the user to change; the permissions for those files in /home/username can be reset so that the user can read them but can't write to them. . userdel-This command completely removes a user's account (thereby eliminating that user's home directory and all files it contains). . passwd-This command updates the "authentication tokens" used by the password management system. TIP To lock a user out of his account, use the following command: # passwd -l username This prepends an ! (exclamation point, also called a bang) to the user's encrypted password; the command to reverse the process uses the -u option. This is a more ele- gant and preferred solution to the problem than the traditional UNIX way of manually editing the file. . usermod-This command changes several user attributes. The most commonly used arguments are -s to change the shell and -u to change the UID. No changes can be made while the user is logged in or running a process. CHAPTER 10 Managing Users 218 . chsh-This command changes the user's default shell. For Ubuntu, the default shell is /bin/bash, known as the Bash, or Bourne Again Shell. Adding New Users The command-line approach to adding this user is actually quite simple and can be accomplished on a single line. In the example shown here, the sysadmin uses the useradd command to add the new user bernice. The command adduser (a variant found on some UNIX systems) is a symbolic link to useradd, so both commands work the same. In this example, we use the -p option to set the password the user requested; we use the -s to set his special shell, and the -u option to specify her UID. (If we create a user with the default settings, we do not need to use these options.) All we want to do can be accomplished on one line: # useradd bernice -p sTitcher -s /bin/zsh -u 1002 The sysadmin can also use the graphical interface that Ubuntu provides, as shown in Figure 10.2. It is accessed as the Users and Groups item from the Administration menu. Here, the sysadmin is adding a new user to the system where user bernice uses the bash command shell. FIGURE 10.2 Adding a new user is simple. The GUI provides a more complete set of commands for user management than for group management. Managing Users 219 These are the steps we used to add the same account as shown in the preceding command, but using the graphical User Manager interface: 1. Launch the Ubuntu User Manager graphical interface by clicking on the Users and Groups menu item found in the System Settings menu. 2. Click the Add User button to bring up the Add User dialog window. 3. Fill in the form with the appropriate information as requested, ensuring you create a good password. 4. Click the Advanced tab and open the drop-down Shell menu to select the bash shell. 5. Using the arrows found in the UID dialog, increment the UID to 1413. 6. Click OK to save the settings. Note that the user is being manually assigned the UID of 1413 because that is her UID on another system machine that will be connected to this machine. Because the system only knows her as 1001 and not as bernice, the two machines would not recognize bernice as the same user if two different UIDs were assigned. NOTE A Linux username can be any alphanumeric combination that does not begin with a special character reserved for shell script use (see Chapter 11, "Automating Tasks," for disallowed characters, mostly punctuation characters). In Chapter 4, we told you that usernames are typically the user's first name plus the first initial of her last name. That is a common practice on larger systems with many users because it makes life simpler for the sysadmin, but is neither a rule nor a requirement. Monitoring User Activity on the System Monitoring user activity is part of the sysadmin's duties and an essential task in tracking how system resources are being used. The w command tells the sysadmin who is logged in, where he is logged in, and what he is doing. No one can hide from the super user. The w command can be followed by a specific user's name to show only that user. The ac command provides information about the total connect time of a user measured in hours. It accesses the /var/log/wtmp file for the source of its information. The ac command proves most useful in shell scripts to generate reports on operating system usage for management review. Note that in order to use the ac command you will have to install the acct package using either synaptic or apt-get. TIP Interestingly, a phenomenon known as timewarp can occur in which an entry in the wtmp files jumps back into the past and ac shows unusual amounts of time accounted for users. Although this can be attributed to some innocuous factors having to do with the system clock, it is worthy of investigation by the sysadmin because it can also be the result of a security breach. CHAPTER 10 Managing Users 220 The last command searches through the /var/log/wtmp file and lists all the users logged in and out since that file was first created. The user reboot exists so that you might know who has logged in since the last reboot. A companion to last is the command lastb, which shows all failed, or bad, logins. It is useful for determining whether a legitimate user is having trouble or a hacker is attempting access. NOTE The accounting system on your computer keeps track of usage user statistics and is kept in the current /var/log/wtmp file. That file is managed by the init and login processes. If you want to explore the depths of the accounting system, use the GNU info system: info accounting. Managing Passwords Passwords are an integral part of Linux security, and they are the most visible part to the user. In this section, you learn how to establish a minimal password policy for your system, where the passwords are stored, and how to manage passwords for your users. System Password Policy An effective password policy is a fundamental part of a good system administration plan. The policy should cover the following: . Allowed and forbidden passwords . Frequency of mandated password changes . Retrieval or replacement of lost or forgotten passwords . Password handling by users The Password File The password file is /etc/passwd, and it is the database file for all users on the system. The format of each line is as follows: username:password:uid:gid:gecos:homedir:shell The fields are self-explanatory except for the gecos field. This field is for miscellaneous information about the user, such as the users' full name, his office location, office and home phone numbers, and possibly a brief text message. For security and privacy reasons, this field is little used nowadays, but the system administrator should be aware of its exis- tence because the gecos field is used by traditional UNIX programs such as finger and mail. For that reason, it is commonly referred to as the finger information field. The data in this field will be comma delimited; the gecos field can be changed with the cgfn (change finger) command. Managing Passwords 221 Note that a colon separates all fields in the /etc/passwd file. If no information is available for a field, that field is empty, but all the colons remain. If an asterisk appears in the password field, that user will not be permitted to log on. Why does this feature exist? So that a user can be easily disabled and (possibly) reinstated later without having to be created all over again. The system administrator manually edits this field, which is the traditional UNIX way of accomplishing this task. Ubuntu provides improved functionality with the passwd -l command mentioned earlier. Several services run as pseudo-users, usually with root permissions. These are the system, or logical, users mentioned previously. You would not want these accounts available for general login for security reasons, so they are assigned /sbin/nologin as their shell, which prohibits any logins from those "users." A list of /etc/passwd reveals the following: $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh ... hplip:x:106:7:HPLIP system user,,,:/var/run/hplip:/bin/false andrew:x:1000:1000:Andrew Hudson,17,01225112233,01225445566:\ /home/andrew:/bin/bash beagleindex:x:107:65534::/var/cache/beagle:/bin/false Note that all the password fields do not show a password, but contain an x because they are shadow passwords, a useful security enhancement to Linux, discussed in the following section. Shadow Passwords It is considered a security risk to keep any password in /etc/passwd because anyone with read access can run a cracking program on the file and obtain the passwords with little trouble. To avoid this risk, shadow passwords are used so that only an x appears in the pass- word field of /etc/passwd; the real passwords are kept in /etc/shadow, a file that can only be read by the sysadmin (and PAM, the Pluggable Authentication Modules authentication manager; see the "PAM Explained" sidebar for an explanation of PAM). Special versions of the traditional password and login programs must be used to enable shadow passwords. Shadow passwords are automatically enabled during the installation phase of the operating system on Ubuntu systems. CHAPTER 10 Managing Users 222 Let's examine a listing of the shadow companion to /etc/passwd, the /etc/shadow file: # cat /etc/shadow root:*:13299:0:99999:7::: daemon:*:13299:0:99999:7::: bin:*:13299:0:99999:7::: ... haldaemon:!:13299:0:99999:7::: gdm:!:13299:0:99999:7::: hplip:!:13299:0:99999:7::: andrew:$1$6LT/qkWL$sPJPp.2QkpC8JPtpRk906/:13299:0:99999:7::: beagleindex:!:13299:0:99999:7::: The fields are separated by colons and are, in order: . The user's login name. . The encrypted password for the user. . The day of which the last password change occurred, measured in the number of days since January 1, 1970. This date is known in UNIX circles as the epoch. Just so you know, the billionth second since the epoch occurred was in September 2001; that was the UNIX version of Y2K-as with the real Y2K, nothing much happened. . The number of days before the password can be changed (prevents changing a pass- word and then changing it back to the old password right away-a dangerous secu- rity practice). . The number of days after which the password must be changed. This can be set to force the change of a newly issued password known to the system administrator. . The number of days before the password expiration that the user is warned it will expire. . The number of days after the password expires that the account is disabled (for secu- rity). . Similar to the password change date, although this is the number of days since January 1, 1970 that the account has been disabled. . The final field is a "reserved" field and is not currently allocated for any use. Note that password expiration dates and warnings are disabled by default in Ubuntu. These features are not used on home systems and usually not used for small offices. It is the sysadmin's responsibility to establish and enforce password expiration policies. The permissions on the /etc/shadow file should be set so that it is not writable or readable by regular users: The permissions should be 600. Managing Passwords 223 PAM Explained Pluggable Authentication Modules (PAM) is a system of libraries that handle the tasks of authentication on your computer. It uses four management groups: account management, authentication management, password management, and session management. This allows the system administrator to choose how individual applica- tions will authenticate users. Ubuntu has preinstalled and preconfigured all the neces- sary PAM files for you. The configuration files in Ubuntu are found in /etc/pam.d. These files are named for the service they control, and the format is as follows: type control module-path module-arguments The type field is the management group that the rule corresponds to. The control field tells PAM what to do if authentication fails. The final two items deal with the PAM module used and any arguments it needs. Programs that use PAM typically come pack- aged with appropriate entries for the /etc/pam.d directory. To achieve greater security, the system administrator can modify the default entries. Misconfiguration can have unpredictable results, so back up the configuration files before you modify them. The defaults provided by Ubuntu are adequate for home and small office users. An example of a PAM configuration file with the formatted entries as described previ- ously is shown next. Here are the contents of /etc/pam.d/gdm: #%PAM-1.0 auth requisite pam_nologin.so auth required pam_env.so readenv=1 auth required pam_env.so readenv=1 envfile=/etc/default/locale @include common-account session required pam_limits.so @include common-session @include common-password Amusingly, even the PAM documents state that you do not really need (or want) to know a lot about PAM to use it effectively. You will likely need only the PAM system administrator's guide. You can find it at http:/ /www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html Managing Password Security for Users Selecting appropriate user passwords is always an exercise in trade-offs. A password such as password (do not laugh, it has been used too often before in the real world with devastat- ing consequences) is just too easy to guess by an intruder as are simple words or number combinations (a street address, for example). A security auditor for one of my former CHAPTER 10 Managing Users 224 employers used to take the cover sheet from an employee's personnel file (which contained the usual personal information of name, address, birth date, and so on) and then attempt to log on to a terminal with passwords constructed from that information- and often succeeded in logging on. On the other hand, a password such as 2a56u'"F($84u^Hiu44Ik%$([#EJD is sure to present great difficulty to an intruder (or an auditor). However, that password is so diffi- cult to remember that it would be likely that the password owner would write that pass- word down and tape it next to her keyboard. I worked for a company in which the entry code to one of the buildings was etched into the cigarette bin outside the door; we never found out who did this, but quickly changed the security number. This is but one of many examples of poor security in the field. The sysadmin has control, with settings in the /etc/shadow file, over how often the pass- word must be changed. The settings can be changed using a text editor, the change command, or a configuration tool such as Ubuntu's User Manager, as shown previously in Figure 10.1. Click on the Password Info tab under that particular user's Properties to set individual password policies. Changing Passwords in a Batch On a large system, there might be times when a large number of users and their pass- words need some attention. The super user can change passwords in a batch by using the chpasswd command, which accepts input as a name/password pair per line in the follow- ing form: $ sudo chpasswd username:password Passwords can be changed en masse by redirecting a list of name and password pairs to the command. An appropriate shell script can be constructed with the information gleaned from Chapter 11. However, Ubuntu also provides the newusers command to add users in a batch from a text file. This command also allows a user to be added to a group, and a new directory can be added for the user, too. Granting System Administrator Privileges to Regular Users On occasion, it is necessary for regular users to run a command as if they were the root user. They usually do not need these powers, but they might on occasion-for example, to temporarily access certain devices or run a command for testing purposes. There are two ways to run commands with root privileges: The first is useful if you are the super user and the user; the second if you are not the regular user (as on a large, multiuser network). Granting System Administrator Privileges to Regular Users 225 Temporarily Changing User Identity with the su Command What if you are also root but are logged on as a regular user because you are performing nonadministrative tasks and you need to do something that only the super user can do? The su command is available for this purpose. NOTE A popular misconception is that the su command is short for super user; it just means substitute user. An important but often overlooked distinction is that between su and su -. In the former instance, you become that user but keep your own environmental variables (such as paths). In the latter, you inherit the environment of that user. This is most noticeable when you use su to become the super user, root. Without appending the -, you do not inherit the path variable that includes /bin or /sbin, so you must always enter the full path to those commands when you just su to root. Don't forget that on a standard Ubuntu system, the first created user is classed as root, whilst the true root account is disabled. To enable the root account, enter the command sudo passwd at the command line and enter your password and a new root password. Once this has been completed then you can su to root. Because almost all Linux file system security revolves around file permissions, it can be useful to occasionally become a different user with permission to access files belonging to other users or groups or to access special files (such as the communications port /dev/ttyS0 when using a modem or the sound device /dev/audio when playing a game). You can use the su command to temporarily switch to another user identity, and then switch back. TIP It is never a good idea to use an Internet Relay Chat (IRC) client as the root user, and you might not want to run it using your regular user account. Simply create a special new user just for IRC and su to that user in a terminal widow to launch your IRC client. The su command spawns a new shell, changing both the UID and GID of the existing user and automatically changes the environmental variables associated with that user, known as inheriting the environment. Refer to Chapter 4 for more information on environmental variables. The syntax for the su command is as follows: $ su option username arguments The man page for su gives more details, but some highlights of the su command are here: -c, --command COMMAND CHAPTER 10 Managing Users 226 pass a single COMMAND to the shell with -c -m, --preserve-environment do not reset environment variables -l a full login simulation for the substituted user, the same as specifying the dash alone You can invoke the su command in different ways that yield diverse results. By using su alone, you can become root, but you keep your regular user environment. This can be verified by using the printenv command before and after the change. Note that the working directory (you can execute pwd as a command line to print the current working directory) has not changed. By executing the following, you become root and inherit root's environment: $ su - By executing the following, you become that user and inherit the super user's environ- ment-a pretty handy tool. (Remember: Inheriting the environment comes from using the dash in the command; omit that, and you keep your "old" environment.) To become another user, specify a different user's name on the command line: $ su - other_user When leaving an identity to return to your usual user identity, use the exit command. For example, while logged on as a regular user, $ su - root the system prompts for a password: Password: When the password is entered correctly, the root user's prompt appears: # To return to the regular user's identity, just type # exit This takes you to the regular user's prompt: $ If you need to allow other users access to certain commands with root privileges, you must give them the root password so that they can use su-that definitely is not a secure solution. The next section describes a more flexible and secure method of allowing normal users to perform selected root tasks. Granting System Administrator Privileges to Regular Users 227 Granting Root Privileges on Occasion-The sudo Command It is often necessary to delegate some of the authority that root wields on a system. For a large system, this makes sense because no single individual will always be available to perform super user functions. The problem is that UNIX permissions come with an all-or- nothing authority. Enter sudo, an application that permits the assignment of one, several, or all of the root-only system commands. NOTE As mentioned earlier, the sudo command is pervasive in Ubuntu, because it is used by default. If you want to get to a root shell, and thereby removing the need to type sudo for every command, just enter sudo -i to get the root prompt. To return to a normal user prompt, enter exit and press Return. After it is configured, using sudo is simple. An authorized user merely precedes the super user authority-needed command with the sudo command, like so: $ sudo command After getting the user's password, sudo checks the /etc/sudoers file to see whether that user is authorized to execute that particular command; if so, sudo generates a "ticket" for a specific length of time that authorizes the use of that command. The user is then prompted for his password (to preserve accountability and provide some measure of secu- rity), and then the command is run as if root had issued it. During the life of the ticket, the command can be used again without a password prompt. If an unauthorized user attempts to execute a sudo command, a record of the unauthorized attempt is kept in the system log and a mail message is sent to the super user. Three man pages are associated with sudo: sudo, sudoers, and visudo. The first covers the command itself, the second the format of the /etc/sudoers file, and the third the use of the special editor for /etc/sudoers. You should use the special editing command because it checks the file for parse errors and locks the file to prevent others from editing it at the same time. The visudo command uses the vi editor, so you might need a quick review of the vi editing commands found in Chapter 4, "Command Line Quickstart," in the section "Working with vi." You begin the editing by executing the visudo command with this: $ sudo visudo The default /etc/sudoers file looks like this: # /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. CHAPTER 10 Managing Users 228 # # See the man page for details on how to write a sudoers file. # Host alias specification # User alias specification # Cmnd alias specification # Defaults Defaults !lecture,tty_tickets,!fqdn # User privilege specification root ALL=(ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL The basic format of a sudoers line in the file is as follows: user host_computer=command The user can be an individual user or a group (prepended by a % to identify the name as a group). The host_computer is normally ALL for all hosts on the network and localhost for the local machine, but the host computer can be referenced as a subnet or any specific host. The command in the sudoers line can be ALL, a list of specific commands, or a restric- tion on specific commands (formed by prepending a ! to the command). A number of options are available for use with the sudoers line, and aliases can be used to simplify the assignment of privileges. Again, the sudoers man page will give the details, but here are a few examples: If we uncomment the line # %wheel ALL=(ALL) NOPASSWD: ALL any user we add to the wheel group can execute any command without a password. Suppose that we want to give a user john permission across the network to be able to add users with the graphical interface. We would add the line john ALL=/users-admin or perhaps grant permission only on her local computer: john 192.168.1.87=/usr/bin/users-admin If we want to give the editor group systemwide permission with no password required to delete files %editors ALL=NOPASSWD: /bin/rm Disk Quotas 229 If we want to give every user permission with no password required to mount the CD drive on the localhost ALL localhost=NOPASSWD:/sbin/mount /dev/scd0 /mnt/cdrom /sbin/umount /mnt/cdrom It is also possible to use wildcards in the construction of the sudoers file. Aliases can be used, too, to make it easier to define users and groups. Although the man page for sudoers contains some examples, http://www.komar.org/pres/sudo/toc.html provides illustrative notes and comments of sudo use at a large aerospace company. The sudo home page at http://www.sudo.ws/ is also a useful resource for additional explanations and examples. The following command presents users with a list of the commands they are entitled to use: $ sudo -l Adding Extra Sudo Users As mentioned earlier, by default Ubuntu grants the first created user full root access through the sudo command. If you need to add this capability for other users, then you can do this easily by adding each user to the admin group or by using the User Manager tool to allow them to Administer the System, which can be found in the User Privileges tab when you edit the properties for a user. Disk Quotas On large systems with many users, you need to control the amount of disk space a user has access to. Disk quotas are designed specifically for this purpose. Quotas, managed per each partition, can be set for both individual users as well as groups; quotas for the group need not be as large as the aggregate quotas for the individuals in the groups. When files are created, both a user and a group own them; ownership of the files is always part of the metadata about the files. This makes quotas based on both users and groups easy to manage. NOTE Disk quota management is never done on a home system and rarely, if ever, done on a small office system. To manage disk quotas, you must have the quota and quotatool packages installed on your system. Quota management with Ubuntu is not enabled by default and has tradition- ally been enabled and configured manually by system administrators. Sysadmins use the family of quota commands, such as quotacheck to initialize the quota database files, edquota to set and edit user quotas, setquota to configure disk quotas, and quotaon or CHAPTER 10 Managing Users 230 quotaoff to control the service. (Other utilities include warnquota for automatically sending mail to users over their disk space usage limit.) Implementing Quotas To reiterate, quotas might not be enabled by default, even if the quota software package is installed on your system. When quotas are installed and enabled, you can see which parti- tions have either user quotas, group quotas, or both by looking at the fourth field in the /etc/fstab file. For example, one line in /etc/fstab shows that quotas are enabled for the /home partition: /dev/hda5 /home ext3 defaults,usrquota,grpquota 1 1 The root of the partition with quotas enabled will have the files quota.user or quota.group in them (or both files, if both types of quotas are enabled), and the files will contain the actual quotas. The permissions of these files should be 600 so that users cannot read or write to them. (Otherwise, users would change them to allow ample space for their music files and Internet art collections.) To initialize disk quotas, the partitions must be remounted. This is easily accomplished with the following: # mount -o ro,remount partition_to_be_remounted mount_point The underlying console tools (complete with man pages) are . quotaon, quotaoff-Toggles quotas on a partition . repquota-A summary status report on users and groups . quotacheck-Updates the status of quotas (compares new and old tables of disk usage); it is run after fsck . edquota-A basic quota management command Manually Configuring Quotas Manual configuration of quotas involves changing entries in your system's file system table, /etc/fstab, to add the usrquota mount option to the desired portion of your file system. As an example in a simple file system, quota management can be enabled like this: LABEL=/ / ext3 defaults,usrquota 1 1 Group-level quotas can also be enabled by using the grpquota option. As the root opera- tor, you must then create a file (using our example of creating user quotas) named quota.user in the designated portion of the file system, like so: # touch /quota.user You should then turn on the use of quotas using the quotaon command: # quotaon -av Disk Quotas 231 You can then edit user quotas with the edquota command to set hard and soft limits on file system use. The default system editor (vi unless you change your EDITOR environment variable) will be launched when editing a user's quota. Any user can find out what their quotas are with $ quota -v NOTE Ubuntu does not support any graphical tools that enable you to configure disk quotas. A Quota mini-HOWTO is maintained at http://www.tldp.org/HOWTO/mini/Quota.html. Related Ubuntu Commands You will use these commands to manage user accounts in Ubuntu: . ac-A user account-statistics command . change-Sets or modifies user password expiration policies . chfn-Creates or modifies user finger information in /etc/passwd . chgrp-Modifies group memberships . chmod-Changes file permissions . chown-Changes file ownerships . chpasswd-Batch command to modify user passwords . chsh-Modifies a user's shell . groups-Displays existing group memberships . logname-Displays a user's login name . newusers-Batches user management command . passwd-Creates or modifies user passwords . su-Executes shell or command as another user . sudo-Manages selected user execution permissions . useradd-Creates, modifies, or manages users . usermod-Edits a user's login profile CHAPTER 10 Managing Users 232 Reference . http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/_User- Authentication-HOWTO.html-The User-Authentication HOWTO describes how user and group information is stored and used for authentication. . http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Shadow- Password-HOWTO.html-The Shadow-Password HOWTO delves into the murky depths of shadow passwords and even discusses why you might not want to use them. . http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/ _Security-HOWTO.html-A must-read HOWTO, the Security HOWTO is a good overview of security issues. Especially applicable to this chapter are sections on creat- ing accounts, file permissions, and password security. . http://www.secinf.net/unix_security/Linux_Administrators_Security_Guide/-A general guide, the Linux System Administrator's Security Guide has interesting sections on limiting and monitoring users. . http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Config- HOWTO.html-How can you customize some user-specific settings? The Config HOWTO Software Configuration gives some advice. . http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Path. html-How can one know the true path? The Path HOWTO sheds light on this issue. You need to understand paths if you want to guide the users to their data and applications. . http://www.courtesan.com/sudo/-The SUperuser DO command is a powerful and elegant way to delegate authority to regular users for specific commands. . http://www.kernel.org/pub/linux/libs/pam/index.html-The Pluggable Authentication Modules suite contains complex and highly useful applications that provide additional security and logging for passwords. PAM is installed by default in Ubuntu. It isn't necessary to understand the intricacies of PAM to use it effectively. 11 CHAPTER IN THIS CHAPTER . Running Services at Bootup Automating Tasks . Beginning the Boot Loading Process . Starting and Stopping Services Manually . Scheduling Tasks . Basic Shell Control In this chapter you learn about the five ways to automate . Writing and Executing a Shell tasks on your system: making them services that run as Script your system starts, making them services you start and stop . Reference by hand, scheduling them to run at specific times, connecting multiple commands together on the shell, and writing custom scripts that group everything together under one command. After you turn on the power switch, the boot process begins with the computer executing code stored in a chip called the BIOS; this process occurs no matter what operating system you have installed. The Linux boot process begins when the code known as the boot loader starts loading the Linux kernel and ends only when the login prompt appears. As a system administrator, you will use the skills you learn in this chapter to control your system's services and manage runlevels on your computer. Understanding the management of the system services and states is essential to understanding how Linux works (especially in a multi-user environment) and will help untangle the mysteries of a few of your Ubuntu system's configuration files. Furthermore, a good knowledge of the cron daemon that handles task scheduling is essential for administrators at all skill levels. This chapter is also an introduction to the basics of creating shell scripts, or executable text files written to conform to shell syntax. Shell scripts run like any other command under Linux and can contain complex logic or a simple series of Linux command-line instructions. You can also run other shell scripts from within a shell program. The features and functions for several Linux shells are discussed in this chapter after a short introduction to working from the shell CHAPTER 11 Automating Tasks 234 command line. You learn how to write and execute a simple shell program using bash, one of the most popular Linux shells. Running Services at Bootup Although most people consider a computer to be either on or off, in Ubuntu there are a number of states in between. Known as runlevels, they control what system services are started upon bootup. These services are simply applications running in the background that provide some needed function to your system, such as getting information from your mouse and sending it to the display; or a service could monitor the partitions to see whether they have enough free space left on them. Services are typically loaded and run (also referred to as being started) during the boot process, in the same way as Microsoft Windows services are. Internally, Ubuntu uses a system known as Upstart for fast booting, but this has a special backward compatibility layer that uses runlevels in the way that Linux veterans are accustomed. You can manage nearly every aspect of your computer and how it behaves after booting via configuring and ordering boot scripts, as well as by using various system administra- tion utilities included with Ubuntu. In this chapter, you learn how to work with these boot scripts and system administration utilities. This chapter also offers advice for trou- bleshooting and fixing problems that might arise with software configuration or the intro- duction or removal of various types of hardware from your system. Beginning the Boot Loading Process Although the actual boot loading mechanism for Linux varies on different hardware plat- forms (such as the SPARC, Alpha, or PowerPC systems), Intel-based PCs running Ubuntu most often use the same mechanism throughout product lines. This process is accom- plished through a Basic Input Output System, or BIOS. The BIOS is an application stored in a chip on the motherboard that initializes the hardware on the motherboard (and often the hardware that's attached to the motherboard). The BIOS gets the system ready to load and run the software that we recognize as the operating system. As a last step, the BIOS code looks for a special program known as the boot loader or boot code. The instructions in this little bit of code tell the BIOS where the Linux kernel is located, how it should be loaded into memory, and how it should be started. If all goes well, the BIOS looks for a bootable volume such as a floppy disk, CD-ROM, hard drive, RAM disk, or other media. The bootable volume contains a special hexadecimal value written to the volume by the boot loader application (likely either GRUB or LILO, although LILO is not provided with Ubuntu) when the boot loader code was first installed in the system's drives. The BIOS searches volumes in the order established by the BIOS settings (for example, the floppy first, followed by a CD-ROM, and then a hard drive) and then boots from the first bootable volume it finds. Modern BIOS's allow considerable flexi- bility in choosing the device used for booting the system. Beginning the Boot Loading Process 235 NOTE If the BIOS detects a hardware problem, the boot process will fail and the BIOS will 11 generate a few beeps from the system speaker. These "beep codes" indicate the nature of the problem the BIOS has encountered. The codes vary among manufactur- ers, and the diagnosis of problems occurring during this phase of the boot process is beyond the scope of this book and does not involve Linux. If you encounter a problem, you should consult the motherboard manual or contact the manufacturer of the mother- board. Next, the BIOS looks on the bootable volume for boot code in the partition boot sector also known as the Master Boot Record (MBR) of the first hard disk. The MBR contains the boot loader code and the partition table-think of it as an index for a book, plus a few comments on how to start reading the book. If the BIOS finds a boot loader, it loads the boot loader code into memory. At that point, the BIOS's job is completed, and it passes control of the system to the boot loader. The boot loader locates the Linux kernel on the disk and loads it into memory. After that task is completed, the boot loader passes control of the system to the Linux kernel. You can see how one process builds on another in an approach that enables many different operating systems to work with the same hardware. NOTE Linux is very flexible and can be booted from multiple images on a CD-ROM, over a network using PXE (pronounced "pixie") or NetBoot, or on a headless server with the console display sent over a serial or network connection. Work is even underway to create a special Linux BIOS at http://www.coreboot.org/ that will expedite the boot process because Linux does not need many of the services offered by the typical BIOS. This kind of flexibility enables Linux to be used in a variety of ways, such as remote servers or diskless workstations, which are not generally seen in personal home use. Loading the Linux Kernel In a general sense, the kernel manages the system resources. As the user, you do not often interact with the kernel, but instead just the applications that you are using. Linux refers to each application as a process, and the kernel assigns each process a number called a process ID (PID). First, the Linux kernel loads and runs a process named init, which is also known as the "father of all processes" because it starts every subsequent process. NOTE Details about the sequence of events that occur when the Linux kernel is loaded can be found in the file /usr/src/linux-2.6/init/main.c if you have installed the Linux kernel documentation. CHAPTER 11 Automating Tasks 236 This next step of the boot process begins with a message that the Linux kernel is loading, and a series of messages will be printed to the screen, giving you the status of each command. A failure should display an error message. The -quiet option may be passed to the kernel at boot time to suppress many of these messages. If the boot process were halted at this point, the system would just sit idle and the screen would be blank. In order to make the system useful for users, we need to start the system services. Those services are some of the applications that allow us to interact with the system. System Services and Runlevels The init command boots Ubuntu to a specific system state, commonly referred to as its runlevel. Runlevels determine which of the many available system services are started, as well as in which order they start. A special runlevel is used to stop the system, and a special runlevel is used for system maintenance. As you will see, there are other runlevels for special purposes. You will use runlevels to manage the system services running on your computer. All these special files and scripts are set up during your installation of Ubuntu Linux, and they receive their initial values based on your choices during the installation-as described in Chapter 3, "Installing Ubuntu," and Chapter 4, "Post-Installation Configuration." You can change and control them manually, as you learn later in this chapter using tools of varying sophistication. Runlevel Definitions The Ubuntu runlevels are defined for the Ubuntu system in /etc/init.d. Each runlevel tells the init command what services to start or stop. Although runlevels might all have custom definitions, Ubuntu has adopted some standards for runlevels: . Runlevel 0-Known as "halt," this runlevel is used to shut down the system. . Runlevel 1-This is a special runlevel, defined as "single," which boots Ubuntu to a root access shell prompt where only the root user may log in. It has networking, X, and multi-user access turned off. This is the maintenance or rescue mode. It allows the system administrator to perform work on the system, make backups, or repair configuration or other files. . Runlevel 2-This is the default runlevel for Ubuntu. . Runlevels 3-5-These runlevels aren't used in Ubuntu but are often used in other Linux distributions. . Runlevel 6-This runlevel is used to reboot the system. Runlevel 1 (also known as single-user mode or maintenance mode) is most commonly used to repair file systems and change the root password on a system when the password Beginning the Boot Loading Process 237 has been forgotten. Trespassers with physical access to the machine can also use runlevel 1 to access your system. 11 CAUTION Never forget that uncontrolled physical access is virtually a guarantee of access to your data by an intruder. Booting into the Default Runlevel Ubuntu boots into runlevel 2 by default, which means it starts the system as normal and leaves you inside the X Window System looking at the Gnome login prompt. It knows what runlevel 2 needs to load by looking in the rc*.d directories in /etc. Ubuntu contains directories for rc0.d through to rc5.d and rcS.d. Assuming that the value is 1, the rc script then executes all the scripts under the /etc/rc.1 directory and then launches the graphical login. If Ubuntu is booted to runlevel 1, for example, scripts beginning with the letter K followed by scripts beginning with the letter S under the /etc/rc1.d directory are then executed: # ls /etc/rc1.d/ K01gdm K19hplip K20laptop-mode K20vsftpd K80slapd K01usplash K20acpi-support K20makedev k21acpid K86ppp ...etc... K19cupsys K20inetutils-inetd K20ssh K74-bluez-utils S20single These scripts, as with all scripts in the rc*.d directories, are actually symbolic links to system service scripts under the /etc/init.d directory. The rc1.d links are prefaced with a letter and number, such as K15 or S10. The (K) or (S) in these prefixes indicate whether or not a particular service should be killed (K) or started (S) and pass a value of stop or start to the appropriate /etc/init.d script. The number in the prefix executes the specific /etc/init.d script in a particular order. The symlinks have numbers to delineate the order in which they are started. Nothing is sacred about a specific number, but some services need to be running before others are started. You would not want your Ubuntu system to attempt, for example, to mount a remote Network File System (NFS) volume without first starting networking and NFS services. Booting to a Non-Default Runlevel with GRUB There might come a time when you do not want to boot into the default runlevel, such as when you want to repair the X server or install a new graphics driver. You'll need to follow several specific steps to boot to a non-default runlevel if you use the default boot loader for Ubuntu, GRUB. CHAPTER 11 Automating Tasks 238 NOTE If you have enabled a GRUB password, you must first press p, type your password, and then press Enter before using this boot method. The GRUB boot loader passes arguments, or commands, to the kernel at boot time. These arguments are used, among other things, to tell GRUB where the kernel is located and also to pass specific parameters to the kernel, such as how much memory is available or how special hardware should be configured. To override the default runlevel, you can add an additional kernel argument to GRUB as follows: 1. At the graphical boot screen, press e (for edit), scroll down to select the kernel, and press e again. 2. Press the spacebar, type single or 1 (Ubuntu allows S and s as well), and press Enter. 3. Finally, press b to boot, and you'll boot into runlevel 1 instead of the default runlev- el listed in /etc/inittab. Understanding init Scripts and the Final Stage of Initialization Each /etc/init.d script, or init script, contains logic that determines what to do when receiving a start or stop value. The logic might be a simple switch statement for execution, as in this example: case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; status) rhstatus ;; condrestart) [ -f /var/lock/subsys/smb ] && restart || : ;; *) echo $"Usage: $0 {start|stop|restart|status|condrestart}" Beginning the Boot Loading Process 239 exit 1 esac 11 Although the scripts can be used to customize the way that the system runs from power- on, absent the replacement of the kernel, this script approach also means that the system does not have to be halted in total to start, stop, upgrade, or install new services. Note that not all scripts will use this approach, and that other messages might be passed to the service script, such as restart, reload, or status. Also, not all scripts will respond to the same set of messages (with the exception of start and stop, which they all have to accept by convention) because each service might require special commands. After all the system scripts have been run, your system is configured and all the necessary system services have been started. If you are using a runlevel other than 5, the final act of the init process is to launch the user shell-bash, tcsh, zsh, or any of the many command shells available. The shell launches and you see a login prompt on the screen. Controlling Services at Boot with Administrative Tools In the Services dialog (shown in Figure 11.1) Ubuntu lists all the services that you can have automatically start at boot time. They are usually all enabled by default, but you can simply uncheck the ones you don't want and click OK. It is not recommended that you disable services randomly "to make things go faster." Some services might be vital for the continuing operation of your computer, such as the graphical login manager and the system communication bus. FIGURE 11.1 You can enable and disable Ubuntu's boot-up services by toggling the check- boxes in the Services dialog. CHAPTER 11 Automating Tasks 240 Changing Runlevels After making changes to system services and runlevels, you can use the telinit command to change runlevels on-the-fly on a running Ubuntu system. Changing runlevels this way allows system administrators to alter selected parts of a running system in order to make changes to the services or to put changes into effect that have already been made (such as reassignment of network addresses for a networking interface). For example, a system administrator can quickly change the system to maintenance or single-user mode by using the telinit command with its S option like this: # telinit S The telinit command uses the init command to change runlevels and shut down currently running services. After booting to single-user mode, you can then return to multi-user mode, like this: # telinit 2 TIP Linux is full of shortcuts: If you exit the single-user shell by typing exit at the prompt, you will go back to the default runlevel without worrying about using telinit. Troubleshooting Runlevel Problems Reordering or changing system services during a particular runlevel is rarely necessary when using Ubuntu unless some disaster occurs. But system administrators should have a basic understanding of how Linux boots and how services are controlled in order to perform troubleshooting or to diagnose problems. By using additional utilities such as the dmesg | less command to read kernel output after booting or by examining system logging with cat /var/log/messages | less, it is possible to gain a bit more detail about what is going on when faced with troublesome drivers or service failure. To better understand how to troubleshoot service problems in Ubuntu, look at the diagno- sis and resolution of a typical service-related issue. In this example, X will not start: You don't see a desktop displayed, nor does the computer seem to respond to keyboard input. The X server might either be hung in a loop, repeat- edly failing, or might exit to a shell prompt with or without an error message. The X server only attempts to restart itself in runlevel 2, so to determine whether the X server is hung in a loop, try switching to runlevel 1. Starting and Stopping Services Manually 241 TIP If you are working on a multi-user system and might inadvertently interrupt the work of 11 other users, ask them to save their current work; then change to a safer runlevel, such as single user mode. Change to runlevel 1 by running the command telinit 1. This switch to runlevel 1 will stop the X server from attempting to restart itself. Now you can easily examine the error and attempt to fix it. First, try to start the X server "naked" (without also launching the window manager). If you are successful, you will get a gray screen with a large X in the middle. If so, kill X with the Ctrl+Alt+Backspace key combination, and look at your window manager configura- tion. (This configuration varies according to which window manager you have chosen.) Let us assume that X won't run "naked." If we look at the log file for Xorg (it's clearly identified in the /var/log directory), we'll pay attention to any line that begins with (EE), the special error code. We can also examine the error log file, .xsessions-error, in our home directory if such a file exists. If we find an error line, the cause of the error might or might not be apparent to us. The nice thing about the Linux community is that it is very unlikely that you are the first person to experience that error. Enter the error message (or better, a unique part of it) into http://www.google.com/linux and discover what others have had to say about the problem. You might need to adjust your search to yield usable results, but that level of detail is beyond the scope of this chapter. Make adjustments and retest as before until you achieve success. Fix the X configuration and start X with startx. Repeat as necessary. CAUTION Before making any changes to any configuration file, always make a backup copy of the original, unmodified file. Our practice is to append the extension .original to the copy because that is a unique and unambiguous identifier. If you need to restore the original configuration file, do not rename it, but copy it back to its original name. Starting and Stopping Services Manually If you change a configuration file for a system service, it is usually necessary to stop and restart the service to make it read the new configuration. If you are reconfiguring the X server, it is often convenient to change from runlevel 2 to runlevel 1 to make testing CHAPTER 11 Automating Tasks 242 easier and then switch back to runlevel 2 to re-enable the graphical login. If a service is improperly configured, it is easier to stop and restart it until you have it configured correctly than it is to reboot the entire machine. The traditional way to manage a service (as root) is to call the service's /etc/init.d name on the command line with an appropriate keyword, such as start, status, or stop. For example, to start the Apache web server, call the /etc/init.d/apache2 script like this: sudo /etc/init.d/apache2 start Starting apache 2.2 web server [ OK ] The script will execute the proper program(s) and report the status of it. Stopping services is equally easy, using the stop keyword. Scheduling Tasks There are three ways to schedule commands in Ubuntu, all of which work in different ways. The first is the at command, which specifies a command to run at a specific time and date relative to today. The second is the batch command, which is actually a script that redirects you to the at command with some extra options set so your command runs when the system is quiet. The last option is the cron daemon, which is the Linux way of executing tasks at a given time. Using at and batch to Schedule Tasks for Later If there is a time-intensive task you want to run, but you do not want to do it while you are still logged in, you can tell Ubuntu to run it later with the at command. To use at, you need to tell it the time at which you want to run and then press Enter. You will then see a new prompt that starts with at>, and everything you type there until you press Ctrl+D will be the commands you want at to run. When the designated time arrives, at will perform each action individually and in order, which means later commands can rely on the results of earlier commands. In this next example, run at just after 5 p.m., at is used to download and extract the latest Linux kernel at a time when the network should be quiet: [paul@caitlin ~]$ at now + 7 hours at> wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.bz2 at> tar xvfjp linux-2.6.10.tar.bz2 at> <EOT> job 2 at 2005-01-09 17:01 Scheduling Tasks 243 Specifying now + 7 hours as the time does what you would expect: at was run at 5 p.m., so the command will run just after midnight that night. When your job has finished, at 11 will send you an email with a full log of your job's output; type mail at the console to bring up your mailbox and then press the relevant number to read at's mail. If you have a more complex job, you can use the -f parameter to have at read its commands from a file, like this: echo wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.bz2\; tar xvfjp linux-2.6.10.tar.bz2 > myjob.job at -f myjob.job tomorrow As you can see, at is flexible about the time format it takes; you can specify it in three ways: . Using the now parameter, you can specify how many minutes, hours, days, or weeks relative to the current time-for example, now + 4 weeks would run the command one month from today. . You can also specify several special times, including tomorrow, midnight, noon, or teatime (4 p.m.). If you do not specify a time with tomorrow, your job is set for precisely 24 hours from the current time. . You can specify an exact date and time using HH:MM MM/DD/YY format-for example, 16:40 22/12/05 for 4:40 p.m. on the 22nd of December 2005. When your job is submitted, at will report the job number, date, and time that the job will be executed; the queue identifier; plus the job owner (you). It will also capture all your environment variables and store them along with the job so that, when your job runs, it can restore the variables, preserving your execution environment. The job number and job queue identifier are both important. When you schedule a job using at, it is placed into queue "a" by default, which means it runs at your specified time and takes up a normal amount of resources. There is an alternative command, batch, which is really just a shell script that calls at with a few extra options. These options (-q b -m now, if you were interested) set at to run on queue b (-q b), mailing the user on completion (-m), and running immediately (now). The queue part is what is important: Jobs scheduled on queue b will only be executed when system load falls below 0.8-that is, when the system is not running at full load. Furthermore, it will run with a lower niceness, meaning a queue jobs usually have a nice- ness of 2, whereas b queue jobs have a niceness of 4. Because batch always specifies now as its time, you need not specify your own time; it will simply run as soon as the system is quiet. Having a default niceness of 4 means that batched commands will get less system resources than a queue job's (at's default) and less system resources than most other programs. You can optionally specify other queues using at. Queue c runs at niceness 6, queue d runs at niceness 8, and so on. However, it is CHAPTER 11 Automating Tasks 244 important to note that the system load is only checked before the command is run. If the load is lower than 0.8, your batch job will be run. If the system load subsequently rises beyond 0.8, your batch job will continue to run, albeit in the background, thanks to its niceness value. When you submit a job for execution, you will also be returned a job number. If you forget this or just want to see a list of other jobs you have scheduled to run later, use the atq command with no parameters. If you run this as a normal user, it will print only your jobs; running it as a superuser will print everyone's jobs. The output is in the same format as when you submit a job, so you get the ID number, execution time, queue ID, and owner of each job. If you want to delete a job, use the atrm command followed by the ID number of the job you want to delete. This next example shows atq and atrm being used to list jobs and delete one: [paul@caitlin ~]$ atq 14 2005-01-20 23:33 a paul 16 2005-02-03 22:34 a paul 17 2005-01-25 22:34 a paul 15 2005-01-22 04:34 a paul 18 2005-01-22 01:35 b paul [paul@caitlin ~]$ atrm 16 [paul@caitlin ~]$ atq 14 2005-01-20 23:33 a paul 17 2005-01-25 22:34 a paul 15 2005-01-22 04:34 a paul 18 2005-01-22 01:35 b paul In that example, job 16 is deleted using atrm, and so it does not show up in the second call to atq. The default configuration for at and batch is to allow everyone to use it, which is not always the desired behavior. Access is controlled through two files: /etc/at.allow and /etc/at.deny. By default, at.deny exists but is empty, which allows everyone to use at and batch. You can enter usernames into at.deny, one per line, to stop those users sched- uling jobs. Alternatively, you can use the at.allow file; this does not exist by default. If you have a blank at.allow file, no one except root is allowed to schedule jobs. As with at.deny, you can add usernames to at.allow one per line, and those users will be able to schedule jobs. You should use either at.deny or at.allow: When someone tries to run at or batch, Ubuntu checks for her username in at.allow. If it is in there, or if at.allow does not exist, Ubuntu checks for her username in at.deny. If her username is in at.deny or at.deny does not exist, she is not allowed to schedule jobs. Scheduling Tasks 245 Using cron to Run Jobs Repeatedly The at and batch commands work well if you just want to execute a single task at a later 11 date, but they are less useful if you want to run a task frequently. Instead, there is the crond daemon for running tasks repeatedly based upon system-and user-requests. Cron has a similar permissions system to at: Users listed in the cron.deny file are not allowed to use Cron, and users listed in the cron.allow file are. An empty cron.deny file-the default-means everyone can set jobs. An empty cron.allow file means that no one (except root) can set jobs. There are two types of jobs: system jobs and user jobs. Only root can edit system jobs, whereas any user whose name appears in cron.allow or does not appear in cron.deny can run user jobs. System jobs are controlled through the /etc/crontab file, which by default looks like this: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root run-parts -report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || run-parts -report /etc/cron.daily 47 6 * * 7 root test -x /usr/sbin/anacron || run-parts -report /etc/cron.weekly 52 6 1 * * root test -x /usr/sbin/anacron || run-parts -report /etc/cron.monthly The first two lines specify which shell should be used to execute the job (defaults to the shell of the user who owns the crontab file, usually /bin/bash), and the search path for executables that will be used. It's important that you avoid using environment variables in this path statement, as they may not be set when the job runs. The next line starts with a pound sign (#) and so is treated as a comment and ignored. The next four lines are the important parts: They are the jobs themselves. Each job is specified in seven fields that define the time to run, owner, and command. The first five commands specify the execution time in quite a quirky order: minute (0-59), hour (0-23), day of the month (1-31), month of the year (1-12), and day of the week (0-7). For day of the week, both 0 and 7 are Sunday, which means that 1 is Monday, 3 is Wednesday, and so on. If you want to specify "all values" (that is, every minute, every hour, every day, and so on), use an asterisk, *. The next field specifies the username of the owner of the job. When a job is executed, it uses the username specified here. The last field is the command to execute. So, the first job runs at minute 17, every hour of every day of every month and executes the command run-parts /etc/cron.hourly. The run-parts command is a simple script that runs all programs inside a given directory-in this case, /etc/cron.hourly. So, in this case, the job will execute at 00:17 (17 minutes past midnight), 01:17, 02:17, 03:17, and so on, and will use all the programs listed in the cron.hourly directory. CHAPTER 11 Automating Tasks 246 The next job runs at minute 25 and hour 6 of every day of every month, running run- parts /etc/cron.daily. Because of the hour limitation, this script will run only once per day, at 6:25 a.m. Note that it uses minute 25 rather than minute 17 so that daily jobs do not clash with hourly jobs. You should be able to guess what the next two jobs do, simply by looking at the commands they run! Inside each of those four directories (cron.hourly, cron.daily, cron.weekly, and cron.monthly) are a collection of shell scripts that will be run by run-parts. For example, in cron.daily you will have scripts like logrotate, which handles backing up of log files, and makewhatis, which updates the whatis database. You can add other system tasks to these directories if you want to, but you should be careful to ensure your scripts are correct. CAUTION The cron daemon reads all the system crontab files and all user crontab files once a minute (on the minute, i.e. at 6:00:00, 6:01:00, and so on) to check for changes. However, any new jobs it finds will not be executed until at least 1 minute has passed. For example, if it is 6:01:49 (that is, 49 seconds past 1 minute past 6 a.m.) and you set a cron job to run at 6:02, it will not execute. At 6:02, the cron daemon will reread its configuration files and see the new job, but it will not be able to execute it. If you set the job to run at 6:02 a.m. every day, it will be executed the following morning and every subsequent morning. This same situation exists when deleting jobs. If it is 6:01:49 and you have a job scheduled to run at 6:02, deleting it will make no difference: cron will run it before it rereads the crontab files for changes. However, after it has reread the crontab file and noticed the job is no longer there, it will not be executed in subsequent days. There are alternative ways of specifying dates. For example, you can use sets of dates and times by using hyphens of commas, such as hours 9-15 would execute at 9, 10, 11, 12, 13, 14, and 15 (from 9 a.m. to 3 p.m.), whereas 9,11,13,15 would miss out at the even hours. Note that it is important you do not put spaces into these sets because the cron daemon will interpret them as the next field. You can define a step value with a slash (/) to show time division: */4 for hours means "every four hours all day", and 0-12/3 means "every three hours from midnight to noon." You can also specify day and month names rather than numbers, using three-character abbreviations: Sun, Mon, Tue, Fri, Sat for days, or Jan, Feb, Mar, Oct, Nov, Dec for months. As well as system jobs, there are also user jobs for those users who have the correct permissions. User jobs are stored in the /var/spool/cron directory, with each user having his own file in his named after his username-for instance, /var/spool/cron/paul or /var/spool/cron/root. The contents of these files contain the jobs the user wants to run and take roughly the same format as the /etc/crontab file, with the exception that the owner of the job should not be specified because it will always be the same as the file- name. Scheduling Tasks 247 To edit your own crontab file, type crontab -e. This brings up a text editor (vim by default, but you can set the EDITOR environment variable to change that) where you can 11 enter your entries. The format of this file is a little different from the format for the main crontab because this time there is no need to specify the owner of the job-it is always you. So, this time each line is made up of six fields: minute (0-59), hour (0-23), day of the month (1-31), month of the year (1-12), day of the week (0-7), and then the command to run. If you are using vim and are new to it, press i to enter insert mode to edit your text; then press Esc to exit insert mode. To save and quit, type a colon followed by wq and press Enter. When programming, we tend to use a sandbox subdirectory in our home directory where we keep all sorts of temporary files that we were just playing around with. We can use a personal job to empty that directory every morning at 6 a.m. so that we get a fresh start each morning. Here is how that would like in our crontab file: 0 6 * * * rm -rf /home/paul/sandbox/* If you are not allowed to schedule jobs, you will be stopped from editing your crontab file. Once your jobs are placed, you can use the command crontab -l to list your jobs. This just prints the contents of your crontab file, so its output will be the same as the line you just entered. If you want to remove just one job, the easiest thing to do is type crontab -e to edit your crontab file in vim; then, after having moved the cursor to the job you want to delete, type dd (two ds) to delete that line. If you want to delete all your jobs, you can use crontab -r to delete your crontab file. TABLE 11.1 Shells with Ubuntu Description Location Name The Bourne Again SHell bash /bin/bash The Korn shell /bin/ksh, ksh /usr/bin/ksh A symbolic link to ksh pdksh /usr/bin/pdksh The restricted shell (for network operation) rsh /usr/bin/rsh A symbolic link to bash sh /bin/sh A csh-compatible shell /bin/tcsh tcsh A compatible csh, ksh, and sh shell /bin/zsh zsh CHAPTER 11 Automating Tasks 248 Basic Shell Control Ubuntu includes a rich assortment of capable, flexible, and powerful shells. Each shell is different but has numerous built-in commands and configurable command-line prompts and might include features such as command-line history, the ability to recall and use a previous command line, and command-line editing. As an example, the bash shell is so powerful that it is possible to write a minimal web server entirely in bash's language using 114 lines of script (see the link at the end of this chapter). Although there are many shells to choose from, most people stick with the default, bash. This is because bash does everything most people need to do, and more. Only change your shell if you really need to. Table 11.1 lists each shell, along with its description and location, in your Ubuntu file system. Learning More About Your Shell All the shells listed in Table 11.1 have accompanying man pages, along with other docu- mentation under the /usr/share/doc directory. Some of the documentation can be quite lengthy, but it is generally much better to have too much documentation than too little! The bash shell includes more than 100 pages in its manual, and the zsh shell documentation is so extensive that it includes the zshall meta man page (use man zshall to read this overview)! The Shell Command Line Having a basic understanding of the capabilities of the shell command line can help you write better shell scripts. If, once you have finished reading this short introduction, you want to learn more about the command line, check out Chapter 33, "Command Line Masterclass." You can use the shell command line to perform a number of different tasks, including . Searching files or directories with programs using pattern-matching, or expressions; these commands include the GNU gawk (linked as awk) and the grep family of commands, including egrep and fgrep. . Getting data from and sending data to a file or command, known as input and output redirection. . Feeding or filtering a program's output to another command (called using pipes). Basic Shell Control 249 A shell can also have built-in job-control commands to launch the command line as a back- ground process, suspend a running program, selectively retrieve or kill running or 11 suspended programs, and perform other types of process control. Multiple commands can be run on a single command line using a semicolon to separate commands: $ w ; free ; df 6:02pm up 4 days, 24 min, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT bball pts/0 shuttle.home.org 1:14pm 0.00s 0.57s 0.01s w total used free shared buffers cached Mem: 190684 184420 6264 76 17620 142820 -/+ buffers/cache: 23980 166704 Swap: 1277156 2516 1274640 Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda1 11788296 4478228 6711248 41% / none 95340 0 95340 0% /dev/shm This example displays the output of the w, free, and df commands. Long shell command lines can be extended inside shell scripts or at the command line by using the backslash character (\). For example, $ echo ""this is a long \ > command line and"" ; echo ""shows that multiple commands \ > may be strung out."" this is a long command line and shows that multiple commands may be strung out. The first three lines of this example are a single command line. In that single line are two instances of the echo command. Note that when you use the backslash as a line-continua- tion character, it must be the last character on the command line (or in your shell script, as you will see later on in this chapter). Using the basic features of the shell command line is easy, but mastering use of all features can be difficult. Entire books have been devoted to using shells, writing shell scripts, and using pattern-matching expressions. The following sections provide an overview of some features of the shell command line relating to writing scripts. Grokking grep If you plan to develop shell scripts to expand the capabilities of pattern-matching com- mands such as grep, you will benefit from learning more about using expressions. One of the definitive guides to using the pattern-matching capabilities of Unix and Linux commands is Mastering Regular Expressions by Jeffrey E. F. Freidl (O'Reilly), ISBN: 0- 596-52812-4. CHAPTER 11 Automating Tasks 250 Shell Pattern-Matching Support The shell command line allows you to use strings of specially constructed character patterns for wildcard matches. This is a different simpler capability than that supported by GNU utilities such as grep, which can use more complex patterns, known as expressions, to search through files or directories or to filter data input to or out of commands. The shell's pattern strings can be simple or complex, but even using a small subset of the available characters in simple wildcards can yield constructive results at the command line. Some common characters used for shell pattern matching are . *-Matches any character. For example, to find all files in the current directory ending in .txt, you could use $ ls *.txt . ?-Matches a single character. For example, to find all files in the current directory ending in the extension .d?c (where ? could be 0-9, a-z, or A-Z), $ ls *.d?c . [xxx] or [x-x]-Matches a range of characters. For example, to list all files in a directory with names containing numbers, $ ls *[0-9]* . \x-Matches or escapes a character such as ? or a tab character. For example, to create a file with a name containing question mark, $ touch foo\? Note that the shell might not interpret some characters or regular expressions in the same manner as a Linux command, and mixing wildcards and regular expressions in shell scripts can lead to problems unless you're careful. For example, finding patterns in text is best left to regular expressions used with commands such as grep; simple wildcards should be used for filtering or matching filenames on the command line. And although both Linux command expressions and shell scripts can recognize the backslash as an escape character in patterns, the dollar sign ($) will have two wildly different meanings (single-character pattern matching in expressions and variable assignment in scripts). Basic Shell Control 251 CAUTION Make sure you read your command carefully when using wildcards; an all-too-common 11 error is to type something like rm -rf * .txt with a space between the * and the .txt. By the time you wonder why the command is taking so long, Bash will already have deleted most of your files. The problem is that it will treat the * and the .txt separately. * will match everything, so Bash will delete all your files. Redirecting Input and Output You can create, overwrite, and append data to files at the command line, using a process called input and output redirection. The shell recognizes several special characters for this process, such as >, <, or >>. In this example, the output of the ls command is redirected to create a file named textfiles.listing: $ ls *.txt >textfiles.listing Use output redirection with care because it is possible to overwrite existing files. For example, specifying a different directory but using the same output filename will over- write the existing textfiles.listing: $ ls /usr/share/doc/mutt-1.4/*.txt >textfiles.listing Fortunately, most shells are smart enough to recognize when you might do something foolish. Here, the bash shell warns that the command is attempting to redirect output to a directory: $ mkdir foo $ ls >foo bash: foo: Is a directory Output can be appended to a file without overwriting existing content by using the append operator, >>. In this example, the directory listing will be appended to the end of textfiles.listing instead of overwriting its contents: $ ls /usr/share/doc/mutt-1.4/*.txt >>textfiles.listing You can use input redirection to feed data into a command by using the < like this: $ cat < textfiles.listing You can use the shell here operator, <<, to specify the end of input on the shell command line: CHAPTER 11 Automating Tasks 252 $ cat >simple_script <<DONE > echo ""this is a simple script"" > DONE $ cat simple_script echo ""this is a simple script"" In this example, the shell will feed the cat command you are typing (input) until the pattern DONE is recognized. The output file simple_script is then saved and its contents verified. This same technique can be used in scripts to create content based on the output of various commands and define an end-of-input or delimiter. Piping Data Many Linux commands can be used in concert in a single, connected command line to transform data from one form to another. Stringing Linux commands together in this fashion is known as using or creating pipes. Pipes are created on the command line with the bar operator (|). For example, a pipe can be used to perform a complex task from a single command line like this: $ find /d2 -name '*.txt' -print | xargs cat | \ tr ' ' '