XFree Local Multi-User HOWTO Svetoslav Slavtchev Aug 2004 Revision 1.4 2004-08-14 Revised by: SS Revision History This is a replaced line comments about ruby-2.6 (a lot more must be removed - linux-2.6 is table now) Revision 1.3 2003-11-11 Revised by: SS Ruby-2.6 is working :) , sync to new BRuby, add config file paths for Gentoo Revision 1.2 2003-09-17 Revised by: SS Lots, lots of stuff. the most major things: XFree-PrefBusID v3, input.rc (and exp. service ruby_init), add "Known Limitations" Revision 1.1 2003-07-14 Revised by: SS sync input agent with examples, a bit more about ruby, less Fix-Me's, additions to video compatibility Revision 1.0 2003-05-13 Revised by: TP Initial release, reviewed by LDP. This HOWTO explains one of the ways to get a working, multiple, local X user-capable PC system for up to 16 users. It is based on using a modified Linux kernel with support for multiple independent users . The second way is not covered here, but on the web page of it's author, the pioneer Miguel This is an inserted line ----------------------------------------------------------------------------- Table of Contents 1. Introduction This is a replaced line 1.3. Related Documentation 1.2. About this document 1.4. New versions of this document This is an inserted line 1.5. Copyright and License 1.7. Credits/Contributors 1.6. Disclaimer 1.8. Feedback/Bug Reporting This is a replaced line 2. Before we begin 2.2. XFree configuration files This is an inserted line 2.1. Known Limitations 2.3. Reusing Xinerama configured XFree 2.4. Binary packages 3. Installing the kernel This is an inserted line 3.1. Installing the Backstreet Ruby/ Ruby-2.6 kernel 3.3. Creating needed device files 3.2. Notes on building your own kernel 3.4. Notes on using multiple VT's & VGA console 3.5. Keyboard numbering(order of detection) 4. Setting up the X servers 4.2. Installing and Configuring XFree-PrefBusID 4.3. Creating symbolic links 4.4. Using independent keyboards with XFree 4.5. Using independent mice with XFree 4.7. Nvidia GLX & DRI This is an inserted line 4.6. For graphic cards without DRI 5. More on configuring input devices 5.1. Finding the real devices 5.2. Using hotplug with input.agent and input.rc 5.3. Using XFree with event interface support 5.4. Using the "Phys" descriptor and USB devices 6. Configuring display managers 6.1. Configuring xdm and kdm 6.2. Configuring gdm 7. Tweaking it 7.1. Using independent sound cards 7.2. Customising the login screen 7.3. 1st X server configuration file 7.4. Number X servers started by Display managers 7.5. Dynamically switching the number of X servers 8. Known problems 8.1. Hardware problems 9. Special notes on some distributions 9.1. Mandrake 9.2. Red Hat 9.3. Debian 9.4. SuSE 10. Final words A. Video Compatibility list A.1. Graphic card pairs/triples that work perfectly A.2. Graphic card pairs/triples that work, but with some glitches B. Example configuration files B.2. Display managers B.1. XFree86 B.3. Configuration files for Input Agent C. Scripts C.1. hotplug: input.agent C.2. hotplug: input.rc C.4. Wrapper for starting X using Nvidia libGL.so C.3. hotplug & XFree supporting event devices: input.agent C.5. For installing Nvidia drivers for parallel use with DRI D. Experimental Backstreet Ruby configuration Script/ Service D.1. README.ruby_init explains how to configure and use the service. D.2. The global configuration file /etc/sysconfig/ruby.conf D.3. The ruby_init service /etc/init.d/ruby_init D.4. Modified hotplug input.agent /etc/hotplug/input.agent This is a replaced line ----------------------------------------------------------------------------- Chapter 1. Introduction 1.1. About Backstreet Ruby/ Ruby Backstreet Ruby is a kernel patch for the Linux kernel. It is a back port to Linux-2.4 of the Ruby kernel tree, which is developed by the Linux Console Project. The aim of the Linux Console developers is to enhance and reorganize the input, the console and the framebuffer subsystems in the Linux kernel, so they can work independent from each other and to allow multi-desktop development Linux-2.5 kernel. The new Input subsystem and the new Framebuffer operation. All this is done in the Ruby kernel tree which is based on the layer are already integrated in Linux-2.5 kernel, but as the main developer rewrite of the framebuffer layer in Linux-2.5, the multi-desktop operation will not be integrated in the next stable Linux kernel (Linux-2.6). So Backstreet Ruby brings to the current stable Linux kernel (Linux-2.4) the enhanced input subsystem and the ability to use multiple graphic cards and multiple keyboards independently, in order to make multiple local XFree users on a single PC system possible. You can have multiple independent graphic cards and multiple independent This is an inserted line need independent keyboards as well. Multiple independent keyboards is the mice, but in order for multiple users to interact with the system, they do feature that Linux-2.4 (and in the future Linux-2.6) lacks, and this is what This is an inserted line Backstreet Ruby adds to the stable Linux kernel Linux-2.4. Aivils.Stoss (at) unibanka.lv> The entire work on back porting Ruby to Linux-2.4 is done by Aivils Stoss. < Aivils got recently his hands on Ruby, and now Ruby is fully functional[1] Linux-2.4 + Backstreet Ruby. This is an inserted line too, so if you prefer the Linux-2.6 kernel you might use Ruby instead of This is an inserted line Visit his web site for more information on the patch itself, on the current This is an inserted line status, how to build a kernel using his patch or how to build modified This is a replaced line This is a replaced line This is an inserted line There are also several mirrors 1. in the United States: [http://people.debian.org/~andreas/aivils/] http://people.debian.org/ ~andreas/aivils/ 2. in Germany: This is an inserted line This is an inserted line [http://www.schuldei.org/aivils/] http://www.schuldei.org/aivils/ This is a replaced line This is an inserted line This is a replaced line ~svetlio/aivils/ http://linuxconsole.sf.net ----------------------------------------------------------------------------- The address of the Linux Console Project is: [http://linuxconsole.sf.net] 1.2. About this document This document explains how to configure your system for multiple local XFree users using the enchanted console/input subsystem in the Backstreet Ruby/ Ruby-2.6 kernel . This is a replaced line I will use :   * "Backstreet Ruby" or "BRuby" to refer to the back port to Linux 2.4   * "Ruby" or "Ruby-2.6" to refer to the original Ruby kernel tree for Linux 2.6 This is a replaced line unless else mentioned. This is an inserted line Note Note users.   Currently it is not possible to set up systems for multiple console There are two ways of setting up multiple local XFree users: This is an inserted line 1. Modify the kernel to ignore input from USB keyboards and add the handling of USB keyboards to a modified Xserver. This solution was developed by Miguel Freitas. Visit his page on the topic at [http:// This is a replaced line up such a system. 2. Use the Backstreet Ruby kernel which supports independent keyboards. This is an inserted line This is an inserted line I'll concentrate on configuring a system for multiple local XFree users using system using the solution from Miguel Freitas. the Backstreet Ruby kernel, but there are parts which can be used also on a Note Note   This document is not intended to be a replacement of the existing /] http://startx.times.lv), but rather, this is a HOWTO, explaining the documentation on the Backstreet Ruby home page ([http://startx.times.lv you'll probably need to consult the more detailed information there. way to a working X multi-user PC system. If you encounter any problems distribution, but I tried to make it distribution-independent by including information about the differences to other mainstream distributions like Debian, Red Hat and SuSE Linux. ----------------------------------------------------------------------------- 1.3. Related Documentation   * The Linux Console Project This is an inserted line [http://linuxconsole.sourceforge.net] http://linuxconsole.sourceforge.net   * The Backstreet Ruby home page [http://startx.times.lv/] http://startx.times.lv/   * XFree with support for the new input layer by Zephaniah Hull (seems the patches are obsolated, and were removed from the site) [http://people.debian.org/~warp/evdev/] http://people.debian.org/~warp/ evdev/   * Miguel Freitas' page on multiple local XFree users [http://cambuca.ldhs.cetuc.puc-rio.br/multiuser/] http://   * Russian multi-terminal project Gorinich This is a replaced line This is an inserted line [http://www.ctc.msiu.ru/zg/main.html] http://www.ctc.msiu.ru/zg/main.html   * Step by step instructions by Jean-Daniel Pauget [http://disjunkt.com/dualhead/] http://disjunkt.com/dualhead/   * Multi-seat XFree solution under Linux with framebuffers, by Frode Trydal ----------------------------------------------------------------------------- 1.4. New versions of this document You can find the latest stable version of this How-To at The Linux Documentation Project web site: This is a replaced line tldp.org/HOWTO/XFree-Local-multi-user-HOWTO/ [http://tldp.org/HOWTO/XFree-Local-multi-user-HOWTO/index.html] http:// This is an inserted line and the latest unstable version : [http://karlovo.demon.co.uk/~svetlio/ruby-contrib/how-to/ XFree_local_multi-user-HOWTO/] http://karlovo.demon.co.uk/~svetlio/ ruby-contrib/how-to/XFree_local_multi-user-HOWTO/ This is a replaced line 1.5. Copyright and License Svetoslav Slavtchev. This document, XFree-Local-multi-user-HOWTO, is copyrighted (c) 2003 by Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is available at [http://www.gnu.org/copyleft/fdl.html] http:// www.gnu.org/copyleft/fdl.html. This is an inserted line Linux is a registered trademark of Linus Torvalds. NVIDIA is a registered trademark of NVIDIA Corporation. ----------------------------------------------------------------------------- 1.6. Disclaimer No liability for the contents of this document can be accepted. Use the concepts, examples and information at your own risk. There may be errors and and although this is highly unlikely, the author(s) do not take any inaccuracies, that could be damaging to your system. Proceed with caution, responsibility. All copyrights are held by their by their respective owners, unless This is a replaced line regarded as affecting the validity of any trademark or service mark. Naming This is an inserted line of particular products or brands should not be seen as endorsements. ----------------------------------------------------------------------------- In this document, I have the pleasure of acknowledging:   * James Simmons for working so hard on Linux console project, for developing the new   * Vojtech Pavlik for rewriting the input subsystem and working hard on the Linux console This is a replaced line   * Aivils Stoss for back porting Ruby to linux-2.4 and providing his back port and experiences to the world   * Andreas Schuldei for providing Debian packages, comments about Debian This is a replaced line ----------------------------------------------------------------------------- 1.8. Feedback/Bug Reporting Feedback is most certainly welcome for this document. Send your additions, users.sourcefourge.net>. contact me or the linuxcosnole mailing list. This is a replaced line Please send as much details as possible, the most important information would be (from a running Backstreet Ruby kernel):   * output from dmesg This is a replaced line   * output from lsmod   * output from cat /proc/bus/console/*/*   * contents of /proc/bus/input/devices   * contents of /proc/bus/usb/devices   * contents of the XFree configuration file(s) /etc/X11/XF86Config(-4)   * contents of the XFree86 log files /var/log/XFree86.[n].log ----------------------------------------------------------------------------- This is a replaced line ----------------------------------------------------------------------------- 2.1. Known Limitations XFree does not support DRI acceleration on multiple graphic cards. The only way to get multiple accelerated X sessions is to use Nvidia's closed source Nvidia's closed source drivers. XFree extensions not dependent on DRI should This is a replaced line This is an inserted line Most of the multiheaded graphic cards can be used only for a single user/ display. In order to start independent X servers the heads have to be explicitly addressable (which can not be done with most of the cards). It should be possible to use cards with explicitly addressable heads for independent displays, but this has not yet been tested. for multiple independent displays :   * The card(s) have different PCI Bus ID's for the different heads This is a replaced line (for example Matrox MMS G200/G450) Linux-2.5/2.6 patch)   * The card(s) register frame buffer device for each head (only with the This is an inserted line Have in mind that the XFree frame buffer driver does not support acceleration and most of the XFree extensions. (for example Matrox G400DH, G450DH, G550DH) Using/configuring independent devices for the independent screens/users is and sound thanks artsd. Some examples of such unexplored areas: Floppy drives, memory sticks, ....   * External storage device (USB/Firewire hard disks, CD/DVD drives, ZIP/   * USB/Firewire printers, scanners, cameras ... In case you succeed in configuring such devices for independent usage by This is a replaced line Note Note   This doesn't mean that the devices won't work, but that every user will have access to all devices. Currently under Backstreet Ruby/ Ruby you can have a maximum of 16 Virtual Terminals (8 for Backstreet Ruby released before 7 Oct 2003). This means that without hotplug configured if you are using USB keyboards with fancy keys you Ruby - 4 users). So do use hotplug if you are going to setup a system for more then 4 users ( even systems with 2 attached USB keyboards benefit from using hotplug). If you are using hotplug the maximal number of independent users is 16 for Backstreet Ruby / Ruby-2.6 and 8 for older versions Backstreet Ruby. ----------------------------------------------------------------------------- This is an inserted line This is a replaced line 2.2. XFree configuration files This is a replaced line You should configure each of your video cards to work properly with a single refer to the documentation that came with your distribution, but some general This is an inserted line This is a replaced line hints couldn't hurt. The easiest way would be to use the same kind of monitors & video cards, you could then configure only the first card/monitor pair, make copies of this configuration file for the number of video cards you have, and then only this with the help of lspci, XFree86 -scanpci -verbose , or other similar adjust the BusID "PCI:x:xx:x" field in the configuration file. You can do distribution-specific tools. You could use a similar approach if you have only monitors or video cards of This is a replaced line Most modern distributions also have advanced tools for easier configuration of Xinerama. You can use these tools to set up the system for Xinerama and then use this configuration file for generating the configuration files for the different X servers. You can use an example configuration file, replacing video card and monitor section, by the corresponding sections from the Xinerama XFConfig-4 file. Other useful resources:   * [http://www.tldp.org/HOWTO/XFree86-HOWTO/index.html] The Linux XFree86 This is an inserted line HOWTO   * [http://www.tldp.org/HOWTO/XFree86-Video-Timings-HOWTO/index.html] System Architecture Overview HOWTO   * [http://www.tldp.org/HOWTO/XWindow-Overview-HOWTO/index.html] X Window   * [http://www.tldp.org/HOWTO/XWindow-User-HOWTO/index.html] The X Window User HOWTO ----------------------------------------------------------------------------- 2.3. Reusing Xinerama configured XFree If you have a system configured for Xinerama, you can easily adjust the XFree configuration file so you can use it for multiple users. This will allow you to easily switch between a multi-user environment and a Xinerama multi-monitor environment. What is Xinerama and how does the system configured using this HOWTO differ This is a replaced line The Xinerama extensions were introduced to the XFree86 system in version 4.0. Xinerama is an extension to XFree86 Release 6 Version 4.0 (X4.0) which allows applications and window managers to use the two (or more) physical displays as one large virtual display. In case Xinerama is not used, applications can Window managers had to be specially written to support the two displays. With Xinerama, window managers and applications don't have to be specially written to support the larger "Virtual Desktop" Xinerama creates. Just the opposite, the primary goal of a system configured according to this PC system. HOWTO is to offer multiple independent displays for several users on a single For more information on Xinerama read: Using Xinerama to MultiHead XFree86 v.4.0+   * [http://www.tldp.org/HOWTO/Xinerama-HOWTO/index.html] Xinerama-HOWTO, ----------------------------------------------------------------------------- 2.4. Binary packages Binary rpms of modified XFree servers are currently available for Mandrake This is an inserted line 8.2/ 9/ 9.1/ 9.2, Red Hat 8/ 9, SuSE 8.1. If you're running other rpm-based This is a replaced line mirrored and are only available from [http://karlovo.demon.co.uk/~svetlio/ This is an inserted line ruby-contrib] http://karlovo.demon.co.uk/~svetlio/ruby-contrib. Binary packages for Debian Sid are also available thanks to Andreas Schuldei at [http://www.schuldei.org/debian/bruby] http://www.schuldei.org/debian/ This is a replaced line ----------------------------------------------------------------------------- Chapter 3. Installing the kernel Note The installation of Ruby-2.6 is not fully covered, partly because there are almost no differences compared to the installation of Linux-2.6 Ruby-2.6 yet, so any comments and questions are welcomed. kernel, partly because I have not gathered enough experience with If you are going to use Ruby-2.6, please do install Linux-2.6 without the Ruby-2.6 patch first and configure your system for it, in order to This is a replaced line configured system because of the Linux-2.4 -> Linux-2.6 changes. A good starting point is probably [http://www.codemonkey.org.uk/docs/ post-halloween-2.6.txt] http://www.codemonkey.org.uk/docs/ post-halloween-2.6.txt" . This is a replaced line ----------------------------------------------------------------------------- 3.1. Installing the Backstreet Ruby/ Ruby-2.6 kernel Now it's time to install the kernel. packages for some distributions (currently only Mandrake and Debian) or a The easiest way would be to pull an already prepared binary kernel; there are source package, and rebuild it on your system. This is a replaced line This is an inserted line also build your own kernel with the Backstreet Ruby/ Ruby-2.6 patch. For more information how to do this visit the Backstreet Ruby page on building and installing the kernel: [http://startx.times.lv] http://startx.times.lv (or some of the mirrors) -> Documentation -> Quick Kernel. very helpful.) karlovo.demon.co.uk/~svetlio/ruby-contrib/] http://karlovo.demon.co.uk/ ~svetlio/ruby-contrib/. You can find binary kernel packages for Mandrake at [http:// Debian binary kernel packages are available at [http://www.schuldei.org/ debian/bruby] http://www.schuldei.org/debian/bruby, or as apt repository "deb http://www.schuldei.org/debian/bruby ./ " Note Note     * If you are going to use USB input devices, it's recommended to use the hid driver instead of usbkbd/ usbmouse.   * Upon loading the hid driver, you might get the following error message: This is a replaced line [root@svetljo RPM]# This is a replaced line This is an inserted line dependency is hardcoded, but overrideable, so you should override it by The reason is that in some version of the module-utils package this adding "above hid usbcore" to your /etc/modules.conf ----------------------------------------------------------------------------- 3.2. Notes on building your own kernel There are some things I would like to mention, although I won't go in details, as the Backstreet Ruby page on compiling the kernel discusses this topic. 1. You have to follow this order: This is an inserted line Input support Console drivers Virtual Terminal support for all required options to be available/selectable. This is a replaced line 2. You have to use built in input support: Input device support --> Input devices (needed for keyboard, mouse,..) Input device support --> Mouse support 3. I would suggest you also include at least one keyboard (built in - not as a module). You can also use modules, but I find it safer to be able to This is a replaced line similar) to load the required modules. For AT/PS2 keyboards, turn on (not modules): Input device support --> Serial i/o support Input device support --> i8042 PC Keyboard controller Input device support --> Keyboards Input device support --> AT keyboard support Input device support --> Keyboards For a USB keyboard turn on (not modules): USB support --> support for USB USB support --> USB Host Controller Drivers USB support --> USB Human Interface Device (full HID) support USB support --> HID input layer support 4. If you are new to Linux, do not try to patch an already patched kernel (heavily patched kernels like the ones that ship with most distributions). Use a kernel from [http://www.kernel.org] www.kernel.org, and take a look at the [http://www.tldp.org/HOWTO/Kernel-HOWTO/] Linux Kernel HOWTO. Note Note   In Backstreet Ruby (the patch for a 2.4 Linux kernel) does not support frame buffer devices , and for that reason is disabled. This is a replaced line In Ruby (the patch for 2.6 Linux kernel) if you want to disable/ change to modules support for PS2 input devices, you have to first activate/ enable "General setup --> Remove kernel features (for embedded systems)" ----------------------------------------------------------------------------- 3.3. Creating needed device files If you are not using the devfs file system, you might need to create several kernel: device files needed for the new input sub-system in the Backstreet Ruby Note Note files, so try booting Backstreet Ruby without creating the device files   Most current distributions should already provide the necessary device This is an inserted line distribution that came with XFree-4.3.0 and linux-2.4.20 should provide these device files. This is an inserted line cd /dev mkdir input.old mv mouse js? input.old mkdir input cd input mknod js0 c 13 0 mknod js1 c 13 1 mknod js2 c 13 2 This is a replaced line mknod mouse0 c 13 32 mknod mouse1 c 13 33 mknod mouse2 c 13 34 mknod mice c 13 63 mknod event0 c 13 64 This is a replaced line mknod event1 c 13 65 mknod event3 c 13 67 mknod event2 c 13 66 This is an inserted line cd .. ln -s input/js0 js0 ln -s input/js1 js1 ln -s input/mice mouse If you use devfs, all required devices will be created automatically by devfs. Mandrake is an example of one distribution that uses devfs. Debian does not use devfs by default, but the kernel supports devfs; in order to activate devfs you have to add "devfs=mount" to the "append" line of your boot loader This is an inserted line and install devfsd (the devfs demon). Distributions that do not use devfs are Red Hat and SuSE. You can check whether devfs is used by issuing the following commands:   * To check whether support for devfs is enabled in your kernel cat /proc/filesystems | grep devfs mount | grep devfs something like the following output, devfs is activated: [root@mc contrib]# cat /proc/filesystems | grep devfs nodev devfs This is a replaced line [root@mc contrib]# mount | grep devfs This is an inserted line none on /proc/bus/usb type usbdevfs (rw) none on /dev type devfs (rw) [root@mc contrib]# ----------------------------------------------------------------------------- As the frame buffer layer is not back-ported to Linux-2.4, only the primary This is an inserted line graphic card is initialized during the boot process. Secondary graphic cards This is an inserted line have a single VGA text console on the primary graphic card. can only be initialized by an X server, so under Backstreet Ruby you will console (which takes over the VGA console), but support for multiple VT's Ruby for Linux-2.6 supports framebuffer devices and single framebuffer This is an inserted line To keep VGA console properly working it is important first to be started the through framebuffer consoles is not yet ready. XFree instance which will drive the graphic card which is used for VGA console(the graphic card defined as primary in BIOS). ----------------------------------------------------------------------------- This is an inserted line 3.5. Keyboard numbering(order of detection) In the following chapters you will read about 1st keyboard, 2nd keyboard and so on, so here I will explain what is meant by n-th keyboard. This is an inserted line When a keyboard device is found, it is bound to a free VT (given that there are free VT's). The first keyboard found will be bound to VT0 (tty1-tty16), the second to VT1 (tty17), the third to VT2 (tty18). Note Note This is a replaced line first keyboard found => VT0 (tty0-tty7) This is an inserted line third => VT2 (tty16-tty23) The order of detecting the keyboards depends on the configuration of your kernel :   * If you are using kernel with integrated USB input the USB keyboard devices will be registered first, then the AT/PS2 keyboards will follow when the modules are loaded   * If you are using kernel with integrated PS2 input the AT/PS2 keyboard devices will be registered first, then the USB keyboards will follow when the modules are loaded   * If you are using kernel with integrated PS2 & USB input the AT/PS2 keyboard devices will be registered first, then the USB keyboards will follow But there are some caveats: common that the multimedia keys or the number-pad identify themselves as a Most USB keyboards represent themselves as more than one keyboard; it is input and have one USB keyboard with multimedia keys and one PS2 keyboard, the USB keyboard will be bound to VT0(real keyboard) and VT1(multimedia consoles). keys), the PS2 keyboard will be bound to VT2 (in case you have enough DUMB There are several ways to work around these issues. Here I'll explain the easiest way to follow. It's definitely not the best one, but the shortest explanation, and I just want to make it clear to you that the problem is not All you need to do is to start the Backstreet Ruby/ Ruby kernel with dumbcon= n , where n is the sum of your AT/PS2 keyboards plus the sum of your USB This is an inserted line a USB keyboard registers), so all keyboards will be bound to a VT. Now you keyboards multiplied by 2 (I suppose this is the maximum number of interfaces should find out which VT's the real keyboards are bound to (the keyboards excluding the multimedia keys) and start X using the appropriate tty ranges. Thanks to the proc interface integrated in Backstreet Ruby, you can easily find the assignment of keyboards to VT's. Each VT creates a file /proc/bus/ VT1 - 01, ... , for VT11 - 11); reading this file will give you the assigned console/[n]/keyboard (n is the number of the VT, for VT0 n will be 00, for keyboard. This is a replaced line [root@svetljo root]# cat /proc/bus/console/*/* usb-00:10.1-1.1/input0 isa0060/serio0/input0 usb-00:10.1-1.1/input1 tells us that:   * USB keyboard (real) is bound to VT0 This is an inserted line This is an inserted line   * USB keyboard (multimedia keys) is bound to VT1   * PS2 keyboard is bound to VT2 Now we can start X on the VT's with real keyboards, in this case VT0 and VT2. Of course in this simple example with only 2 keyboards (one USB and one PS2) support. The PS2 keyboard would be found first and bound to VT0, the USB keyboard would follow and it's real keyboard interface would be bound to VT1, so there is no need for additional dumb consoles (for the multimedia interfaces of USB keyboards). ----------------------------------------------------------------------------- This is a replaced line Now its time to configure XFree. This is a replaced line 4.1. Do I need a modified X server?   For some video cards you can skip this part. Before installing the Note Note modified X server check the Video Compatibility list to determine whether you need one. Currently there are reports for working configurations without using a modified X server for Voodoo Graphics as primary and Voodoo3 or Nvidia TNT2 as secondary. "Why should a modified X server be used?" - The reason is that XFree is designed to serve a single user and this design requires a single X server to drive all available graphic cards. So when an unmodified X server starts, it disables access to graphic cards for other X servers. Hence we have to modify XFree to make it possible more then one X server to run at the same time.   * "The experimental way": you can use the "hackvideo"(ignoring pci_disable you to use the XFree server that came with your distribution (no need for XFree commands) feature of the Backstreet Ruby kernel. This will allow installing modified XFree server). Q: "Why experimental?" A: Well, you have to find out whether it works with your combination of graphic cards. There are some combination that works flawlessly, but the majority of tested combinations have problems with this setup.   * "The surer way": you have to install XFree server modified with the Prefered Bus ID patch. Q: "Why surer?" This is an inserted line A: Because it works with all "supported graphic cards", solves a lot of stability problems and makes it possible to use VGA console on the This is a replaced line This is a replaced line This is an inserted line If you decide first to try without installing a modified X server, follow 1. To enable this feature you have to add this to your XFree configuration these steps: file: Section "ServerFlags" Option "PciOsConfig" "1" EndSection ... 2. and to inform the kernel to filter unnecessary PCI commands: This is a replaced line This is an inserted line if [ -x /proc/bus/pci/hackvideo ];then /bin/echo "1"> /proc/bus/pci/hackvideo 3. If you want this to be done automatically on every boot you have to add : fi to your init scripts, preferably somewhere at the end of /etc/rc.d/ rc.sysinit (so the command is executed before X is started) 4. If you want to disable this functionality you have to: This is a replaced line This is a replaced line   This functionality exists in the Backstreet Ruby kernel since 15. May 2003 and in Ruby-2.6 since 29. Sep 2003 , but will never be added to the This is a replaced line modified X server. It is still recommended to install modified X server. ----------------------------------------------------------------------------- 4.2. Installing and Configuring XFree-PrefBusID This is a replaced line This is a replaced line   + Install an already built, but not packaged, modified X server and create the necessary symbolic links. You can get such binaries from startx.times.lv. the Backstreet Ruby home page, at [http://startx.times.lv] http://   + Help us (as well other people using your distribution) in building an rpm or binary for your distribution (we lack systems installed with all available distributions, so we are not able to build packages for every distribution). Backstreet Ruby page. Go to the Documentation section, at [http:// startx.times.lv] http://startx.times.lv (or some of the mirrors) -> Documentation -> Quick XFree. 2. Find the BusID of your graphic cards Note Note This is an inserted line   For AGP cards, something similar to "1:0:0" For PCI cards, something similar to "0:xx:0" This is an inserted line section of the XFree configuration file.   + In most cases you will find the BusID already set in the device (Virtually always in case XFree is configured for Xinerama.)   + If it is missing you can use lspci, XFree86 -scanpci -verbose or other similar tools that came with your distribution. With lspci look for "VGA compatible controller" or other similar tools that came with your distribution. 00:0d.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 MX 420] (rev a3) root@svetljo mnt]# lspci | grep "VGA compatible controller" 01:00.0 VGA compatible controller: ATI Technologies Inc Radeon RV200 QW [Radeon 7500] [root@svetljo mnt]# This is an inserted line XFree86 :1 -scanpci -verbose and look for your graphic cards: [root@svetljo mnt]# XFree86 :1 -scanpci -verbose With XFree86 -scanpci -verbose , or in case XFree is already running ...... ...... (1:0:0) unknown card (0x1002/0x0f2a) using a ATI Technologies Inc Radeon RV200 QW [Radeon 7500] This is a replaced line 3. Configure XFree-PrefBusID. You have the following choices with the same effect:   + Use the XFree config file option "SingleCard" , requires as argument a boolean value(true/false), added in patch version 3 For use in multi-user environment set to true, for standard XFree behavior(single X server allowed) to false or comment out/ delete the line. Note This functionality is inlcuded the xorg-x11 packages for Mandrake and in Debian Sid XFree86 packages.   + Use the XFree config file option "PrefBusID" , requires as argument a For use in multi-user environment include the option with a valid BusID, for standard XFree behavior(single X server allowed) comment valid BusID, added in patch version 2 out or delete. This is an inserted line Note This functionality is inlcuded the xorg-x11 packages for Mandrake and in Debian Sid XFree86 packages, but the option name is changed to "IsolateDevice" argument a valid BusID, initial release of the patch For use in multi-user environment pass the option with a valid BusID to XFree at start-up, for standard XFree behavior(single X server allowed) don't specify the option. Mandrake and in Debian Sid XFree86 packages, but the option name is changed to -isolateDevice x:x:x     * For Mandrake and Debian users: Note Note the XFree configuration files are normally /etc/X11/XF86Config-4   * For Red Hat, Gentoo, SuSE users: the XFree configuration files are normally /etc/X11/XF86Config   + using the "SingleCard" option Section "ServerLayout" Identifier "X0" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" Option "SingleCard" "true" EndSection InputDevice "Keyboard0" "CoreKeyboard" Identifier "X1" Section "ServerLayout" Screen 0 "Screen1" 0 0 InputDevice "Mouse1" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" Option "SingleCard" "true" This is an inserted line EndSection Note Note   The BusID have to be specified in the "Device" Section of the Section "Device" This is a replaced line Identifier "nv" VendorName "" BoardName "" This is an inserted line Driver "nvidia" # Clock lines # Uncomment following option if you see a big white block # instead of the cursor! # Option "sw_cursor" Option "NoLogo" "On" BusID "PCI:0:13:0" EndSection This is an inserted line   + using the "PrefBusID/IsolateDevice" option (requires as argument a valid BusID) This is a replaced line Identifier "X0" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" Option "PrefBusID" "1:0:0" EndSection Section "ServerLayout" Screen 0 "Screen1" 0 0 This is a replaced line This is a replaced line Option "PrefBusID" "0:13:0" InputDevice "Keyboard0" "CoreKeyboard" EndSection or for Debian Sid's XFree86 and Mandrake's xorg-x11 Section "ServerLayout" Screen 0 "Screen0" 0 0 Identifier "X0" InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" This is an inserted line Option "IsolateDevice" "1:0:0" EndSection Identifier "X1" Section "ServerLayout" Screen 0 "Screen1" 0 0 InputDevice "Mouse1" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" This is an inserted line EndSection Option "IsolateDevice" "0:13:0"   + using the "-prefbusid" option at XFree start-up (requires as argument a valid BusID) or for Debian Sid's XFree86 and Mandrake's xorg-x11 use "-isolateDevice" instead this choice is valid.   For the older(version 1) Preferred Bus ID XFree Server only This is a replaced line For example on command line [root@svetljo mnt]# startx -- /usr/X11R6/bin/X0 :0 -prefbusid 1:0:0 vt7 , or from a display manager (gdm): .............................. This is an inserted line # Definition of the standard X server. [server-Standard] name=Standard server command=/usr/X11R6/bin/X0 :0 -layout first-Xserver -deferglyphs 16 -ac -prefbusid 1:0:0 vt7 This is a replaced line [server-Second] name=Second server command=/usr/X11R6/bin/X1 :1 -layout second-Xserver -deferglyphs 16 -prefbusid 0:13:0 vt17 flexible=true .............................. and for xdm/kdm :0 local /bin/nice -n -10 /usr/X11R6/bin/X0 :0 -deferglyphs 16 -prefbusid 1:0:0 vt7 :1 local /bin/nice -n -10 /usr/X11R6/bin/X1 :1 -xf86config /etc/X11/XF86Config-4.TNT2 -prefbusid 0:13:0 vt17 ----------------------------------------------------------------------------- 4.3. Creating symbolic links The symbolic links are needed for properly starting several XFree instances, as well for properly exiting an X session. This applies for both starting X from console and the automatic starting of X by the display manager (kdm, gdm, xdm). This is an inserted line You need to create as many symbolic links to the modified X server binary (or to the original X server in case you do not need a modified one), as the I assume that you will have to use a modified X server, but in case you do not need it, use the following commands to create the links to your original X server: cd /usr/X11R6/bin/ ln -s XFree[modified] X0 ln -s XFree[modified] X1 ln -s XFree[modified] X2 This is a replaced line In case you use the provided rpm packages, you'll only need this if you want more than 4 parallel running X servers/X sessions, as the rpm creates 4 ----------------------------------------------------------------------------- 4.4. Using independent keyboards with XFree This is an inserted line Once you install the Backstreet Ruby/ Ruby-2.6 kernel and start it with dumbcon=n, you get n +1 independent consoles [1 VGA(or Framebuffer under Ruby-2.6) + n DUMB] . If you have enough keyboards connected to your PC, each of these consoles are associated with a given keyboard. This enables you to associated with the corresponding console for input. Hence you get multiple This is a replaced line independent X servers with independent keyboards, which in turn make it simultaneously. possible for one single PC to be used by several local X users To start X on a given console (using a given independent keyboard) you pass   * VGA(or Framebuffer for Ruby-2.6): tty1 to tty16 it the argument vt[N], where N is a number from a given tty range.   * DUMB1: tty17   * DUMB2: tty18 If you have 3 video cards, 3 keyboards, and you have started the Backstreet simultaneous users with the following commands:     * For Mandrake and Debian users: the XFree configuration files are normally /etc/X11/XF86Config-4   * For Red Hat, Gentoo, SuSE users: This is a replaced line the XFree configuration files are normally /etc/X11/XF86Config Caution Caution   Have in mind that for the older Preferred Bus ID XFree Server (version 1) you have to specify the desired graphic card with parameter "-prefbusid x:x:x" where x:x:x is the Bus ID of the desired graphic card. Just append "-prefbusid x:x:x" with the correct Bus ID of the card you want to start right before the last argument vt[x]. If you omit this option the modified X server will act as a not modified/ standard XFree server and you wont be able to run multiple XFree instances at the same time. This is a replaced line For the 1st X server with the 1st keyboard: This is an inserted line This is a replaced line 1st video card] vt7 For the 2nd X server with the 2nd keyboard: $ startx -- /usr/X11R6/bin/X1 :1 -xf86config /etc/X11/XF86Config-4[for your 2nd video card] vt17 For the 3rd X server with the 3rd keyboard: This is an inserted line This is a replaced line 3rd video card] vt18 For the 1st X server you can skip the -xf86config /etc/X11/XF86Config-4[for /etc/X11/XF86Config-4, will be used. your 1st video card] argument. In this case, the default configuration file, Note Note This is a replaced line   * DUMB1: tty8 to tty15 This is an inserted line   * DUMB2: tty16 to tty23 This means that you have to use different vt parameter for the This is a replaced line For the 2nd X server with the 2nd keyboard: your 2nd video card] vt8 $ startx -- /usr/X11R6/bin/X1 :1 -xf86config /etc/X11/XF86Config-4[for This is a replaced line $ startx -- /usr/X11R6/bin/X2 :2 -xf86config /etc/X11/XF86Config-4[for This is a replaced line This is an inserted line This is a replaced line You can also setup your display manager to start the independent X servers, This is an inserted line once everything is properly configured. But don't rush to setup your display manager before the configuration is finished, because this could give you This is an inserted line serious problems. When you are ready with the required configurations, you'll reach the section on configuring the display manager. ----------------------------------------------------------------------------- To use an independent mouse for each of your independent X servers/sessions, you just have to modify the input section of the XFree configuration files to This is a replaced line Use /dev/input/mouse[n], where n is the number of your mouse starting from 0:   * 1st mouse --> /dev/input/mouse0   * 2nd mouse --> /dev/input/mouse1   * 3rd mouse --> /dev/input/mouse2   * 4th mouse --> /dev/input/mouse3 You shouldn't use /dev/input/mice because it merges the input from all mouse devices. Here is my configuration before modifications: This is an inserted line # ********************************************************************** # Pointer section # ********************************************************************** Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "IMPS/2" Option "Device" "/dev/psaux" Option "ZAxisMapping" "4 5" # ChordMiddle is an option for some 3-button Logitech mice Option "Emulate3Buttons" # Option "ChordMiddle" EndSection ------------------------------------------------------------------------------------------------ After modifications for the first X server: ------------------------------------------------------------------------------------------------ # ********************************************************************** # Pointer section # ********************************************************************** Section "InputDevice" Identifier "Mouse1" This is an inserted line Driver "mouse" Option "Protocol" "IMPS/2" This is an inserted line Option "Device" "/dev/input/mouse0" Option "ZAxisMapping" "4 5" This is a replaced line This is a replaced line Option "Emulate3Buttons" # Option "ChordMiddle" EndSection This is an inserted line ----------------------------------------------------------------------------------------------- For the second X server: ----------------------------------------------------------------------------------------------- # ********************************************************************** # Pointer section # ********************************************************************** Section "InputDevice" This is an inserted line Driver "mouse" Option "Device" "/dev/input/mouse1" Option "ZAxisMapping" "4 5" # ChordMiddle is an option for some 3-button Logitech mice This is an inserted line Option "Emulate3Buttons" # Option "ChordMiddle" This is an inserted line ----------------------------------------------------------------------------------------------- EndSection and so on ... This is a replaced line ----------------------------------------------------------------------------- 4.6. For graphic cards without DRI (or reusing Xinerama configured XFree) There could be several reasons for not using DRI: This is a replaced line   * As far I know only one graphic card in a system can use DRI.   * The Nvidia closed source driver does not support DRI. This is an inserted line This is a replaced line In case one of this reasons applies to your system, you do not need different XFree configuration files for the different displays. You can configure your system for Xinerama using the tools provided with your distribution and reading [http://www.tldp.org/HOWTO/Xinerama-HOWTO/ index.html] The Xinerama-HOWTO, so when the system is used by a single user, he/she could switch to Xinerama desktop and use all available displays for a bigger desktop. Once configured for Xinerama, only small additions are needed to achieve is actually needed only for the mouse devices, as the keyboard is managed use single screen definition and have independent input devices (well, this through the vt[n] option). If you have configured Xinerama in the following way: Identifier "Simple Layout" Section "ServerLayout" Screen "Screen 2" Screen "Screen 1" RightOf "Screen 2" InputDevice "Mouse1" "CorePointer" InputDevice "Keyboard1" "CoreKeyboard" EndSection definitions for a single screen : Section "ServerLayout" Identifier "first-Xserver" Screen "Screen 1" InputDevice "Keyboard1" "CoreKeyboard" EndSection Section "ServerLayout" Screen "Screen 2" Identifier "second-Xserver" InputDevice "Mouse2" "CorePointer" InputDevice "Keyboard1" "CoreKeyboard" EndSection Which should result in these layout definitions: Section "ServerLayout" Screen "Screen 2" Identifier "Xinerama" Screen "Screen 1" RightOf "Screen 2" InputDevice "Mouse1" "CorePointer" InputDevice "Keyboard1" "CoreKeyboard" EndSection Section "ServerLayout" Identifier "first-Xserver" Screen "Screen 1" InputDevice "Keyboard1" "CoreKeyboard" EndSection Section "ServerLayout" Identifier "second-Xserver" Screen "Screen 2" InputDevice "Mouse2" "CorePointer" InputDevice "Keyboard1" "CoreKeyboard" EndSection Now you can start a single X server with option -layout Xinerama and enjoy the Xinerama desktop, or You can start 2 independent X servers using -layout first-Xserver for the first, and -layout second-Xserver for the second. Since you will use a single XFree configuration file for all X servers,   * in order to use independent keyboards you have to use following command: For 1st X server with the 1st keyboard: $ startx -- /usr/X11R6/bin/X0 :0 -layout first-Xserver vt7 For 2nd X server with the 2nd keyboard: $ startx -- /usr/X11R6/bin/X1 :1 -layout second-Xserver vt17 and if you want to use Xinerama: $ startx -- /usr/X11R6/bin/X -layout Xinerama vt7   *  Note Note For 1st X server with the 1st keyboard: This is a replaced line For 2nd X server with the 2nd keyboard: $ startx -- /usr/X11R6/bin/X1 :1 -layout second-Xserver vt8   * also the mice must have different identifiers: ------------------------------------------------------------------------------------------------ # ********************************************************************** # Pointer section # ********************************************************************** Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "IMPS/2" Option "Device" "/dev/input/mouse0" Option "ZAxisMapping" "4 5" # ChordMiddle is an option for some 3-button Logitech mice Option "Emulate3Buttons" # Option "ChordMiddle" EndSection Section "InputDevice" Identifier "Mouse2" Driver "mouse" Option "Protocol" "IMPS/2" Option "ZAxisMapping" "4 5" Option "Device" "/dev/input/mouse1" # ChordMiddle is an option for some 3-button Logitech mice Option "Emulate3Buttons" # Option "ChordMiddle" EndSection ----------------------------------------------------------------------------------------------- This is an inserted line ----------------------------------------------------------------------------- 4.7. Nvidia GLX & DRI   Here you will learn how to configure your system for parallel use of Note Note Nvidia's GLX and XFree's DRI. If you do not have Nvidia cards, or you first case you do not need the Nvidia GLX at all, and in the second, you This is an inserted line have only Nvidia cards, you do not need to read this section. In the This is a replaced line Why Nvidia? Why closed source drivers? This is an inserted line 1. With the open source driver it's almost impossible to bring up a secondary card, so we should use the closed source driver. PCI video cards with some acceleration. This is an inserted line 2. Why the Nvidia card? Currently these are the only available, affordable emails to XFree, DRI and lkml list, but I only got a single answer with This is a replaced line G550 DH AGP & SiS63xx PCI, but when enabled for both cards, I got AGP errors. When enabled only for one of the cards, I got DRI up and running. Please, someone confirm or prove me wrong! This is a replaced line I'll explain several ways to get configuration working for both Nvidia GLX and XFree86 DRI. There are probably a lot of other possibilities, and maybe these are not the simplest, but they are the ones I know to work. The reasons why this is needed: 1. Nvidia should use a different module path for xf86: the glx extension module from Nvidia is incompatible with the one from XFree86. This is an inserted line 2. Nvidia should use a different XF86Config file: because DRI should be This is an inserted line disabled for Nvidia and enabled for others. Caution Caution   This can not be used as-is on SuSE Linux. In order to make it easy If you find a simpler way, please email it me and I'll include it. SuSE uses a very complicated setup for the GL libraries. To use this for the user to switch between Mesa, XFree and Nvidia GL libraries, setup you have to switch your configuration to XFree86's GL libraries. ----------------------------------------------------------------------------- 4.7.1. Example 1 This is an inserted line This is the configuration that I use on my system (ATI AIW Radeon 7500 AGP and Nvidia TNT2 M64 PCI) XFree configuration files: 1. Create a directory /usr/X11R6/libNV: This is a replaced line This is a replaced line 2. Create links to the original /usr/X11R6/lib: cd /usr/X11R6/libNV 3. Install the Nvidia driver and libraries in /usr/X11R6/libNV. 4. Install Nvidia's libGLcore.so.1.0 [driver version], or better, This is an inserted line libGLcore.so.1, in /usr/lib. Make a symbolic link from /usr/X11R6/libNV/ libGLcore.so.1 to /usr/lib/libGLcore.so.1 (this will allow you to easily update your Nvidia drivers): cd /usr/lib ln -s ../X11R6/libNV/libGLcore.so.1 ./ This is an inserted line Note: the Nvidia libGL.so is installed /usr/X11R6/libNV, so it's invisible to the system unless you tell the system about the existence of /usr/X11R6/libNV. For this setup, you must not do this, as it will break the standard X server start-up. But you can use the XFree GL libraries This is an inserted line with the Nvidia graphic card and Nvidia closed source drivers, with a non-Nvidia graphic card, using XFree's DRI, which the GL library from This is an inserted line Nvidia cannot do. This is a replaced line This is an inserted line 5. Add a line in the XFree configuration file for the Nvidia card to point Section "Files" .......... ModulePath "/usr/X11R6/libNV/modules" This is an inserted line .......... EndSection This is a replaced line Now everything should be fine and you should be able to use DRI and Nvidia This is an inserted line This is a replaced line to a setup which uses Nvidia's libGL & libGLcore, but the difference is not that big on my PC. ----------------------------------------------------------------------------- 4.7.2. Example 2 This example will give you the full performance of both the Nvidia card(s), and the non-Nvidia card, since XFree's libGL is used for the non Nvidia card, and Nvidia's libGL is used for Nvidia cards. But this will require one more X server to be precise; a simple wrapper to add the path to the Nvidia libraries, and symbolic links to it for additional Nvidia cards. It is almost the same as the previous scenario, with the difference that the X servers for the Nvidia cards should start with an environment where Nvidia's libGL is known, while the X servers for non Nvidia cards shouldn't know anything about the Nvidia libGL. This requires a wrapper to be used for starting the X servers driving Nvidia cards. This is a replaced line Install the Nvidia libraries and kernel driver like in the previous example. You may skip step 4. as libGLcore.so.1 is installed in /usr/X11R6/libNV, and Nvidia libraries. we'll inform the X servers driving Nvidia cards about the proper path to the #!/bin/bash The missing part - the wrapper : export LD_LIBRARY_PATH=/usr/X11R6/libNV exec /usr/X11R6/bin/X0 $* Copy these lines into your favourite editor and save the file as XNV. Make it executable: chmod +x XNV Copy the file to /usr/X11R6/bin and make symbolic links to it for additional Nvidia cards (for additional cards just add more links): cp XNV /usr/X11R6/bin cd /usr/X11R6/bin ln -s XNV Xnv0 ln -s XNV Xnv1 ln -s XNV Xnv2 Remember to use /usr/X11R6/bin/Xnv0, /usr/X11R6/bin/Xnv1 ..., instead of /usr /X11R6/bin/X0, /usr/X11R6/bin/X1 ... for your Nvidia cards while configuring the display managers in the next chapter, or when starting X on Nvidia card ----------------------------------------------------------------------------- (s) from console. 4.7.3. Installing the Nvidia libraries easily if you don't understand what happens here. To-do: write a script to perform This is an inserted line Using the new Nvidia installer (note, this is a work in progress, do not use steps 1-4. Please provide some feedback on the script in Appendix->Scripts): Manually: 1. Make a backup of your XFree GL libraries: cd [XFree prefix] cd $OPENWINHOME On my Mandrake system I can use: find lib -name "libGL.*" -o -name "libGLcore*" -o -name "libglx.*" | xargs tar rpfv libGL-backup.tar This is an inserted line ./NVIDIA-Linux-x86-1.0-4349.run --no-opengl-headers --xfree86-prefix=/usr/X11R6NV --opengl-prefix=/usr/X11R6NV This is a replaced line cd /usr/X11R6NV/lib && tar cv * | tar xvC /usr/X11R6/libNV/ 4. Restore the backed-up GL libraries: This is an inserted line This is a replaced line cd [XFree prefix] tar xvfp libGL-backup.tar && ldconfig This is a replaced line Chapter 5. More on configuring input devices Here you will find more details on configuring input devices and dealing with secondary keyboard interfaces found in USB multimedia keyboards. If you feel comfortable under Linux, please review and test the experimental service ruby_init. The service, the configuration file and the README can be found in Appendix D. Any kind of feedback is highly appreciated. (Please, please drop a line with comments. :-) ) Note Note   If you are configuring a system with two displays( 2 keyboards, 2 mice) you probably can skip to Chapter 6 "Configuring display managers", but if you want to use a single system for more users you will find really useful information in this chapter. ----------------------------------------------------------------------------- 5.1. Finding the real devices We will need this information later on, to be able to assign a given keyboard /mouse to a given X-server/Display. To find the PHYS ID's (the addresses) or the name(quite oft it differs from the one labeled on the device) of your input devices you have to read the file /proc/bus/input/devices. Here is what I have: [svetljo@svetljo How-To]# cat /proc/bus/input/devices I: Bus=0011 Vendor=0002 Product=0002 Version=0034 P: Phys=isa0060/serio1/input0 H: Handlers=mouse0 ts0 B: EV=7 B: KEY=f0000 0 0 0 0 0 0 0 0 B: REL=103 I: Bus=0011 Vendor=0001 Product=0002 Version=ab02 P: Phys=isa0060/serio0/input0 N: Name="AT Set 2 keyboard" B: EV=120003 B: KEY=4 2000000 8061f9 fbc9d621 efdfffdf ffefffff ffffffff fffffffe B: LED=7 I: Bus=0003 Vendor=046d Product=c303 Version=0700 N: Name="Logitech USB Keyboard" P: Phys=usb-00:10.1-1.1/input0 B: EV=120003 H: Handlers=kbd B: KEY=10000 7f ffe00000 7ff ffbeffdf ffffffff ffffffff fffffffe B: LED=7 I: Bus=0003 Vendor=046d Product=c303 Version=0700 N: Name="Logitech USB Keyboard" P: Phys=usb-00:10.1-1.1/input1 H: Handlers=kbd B: EV=100003 B: KEY=1078 1800d100 1e0000 0 0 0 I: Bus=0003 Vendor=05fe Product=0011 Version=0000 This is a replaced line H: Handlers=mouse1 ts1 P: Phys=usb-00:10.1-1.2/input0 B: EV=7 B: KEY=1f0000 0 0 0 0 0 0 0 0 B: REL=103 Note Note     * /proc/bus/input/devices will provide the needed information for all devices except USB multimedia/office keyboards.   * For such USB multimedia/office keyboards you will have to gather additional information, for example with the help of lsusb.   * Under Ruby-2.6 for usb devices it will look like "usb-0000:00:10.x" not "usb-00:10.x" This is a replaced line   * First we have to find the address of the USB keyboard: [root@svetljo How-To]# lsusb Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 003 Device 002: ID 0409:55ab NEC Corp. Hub [iMac kbd] Bus 003 Device 004: ID 05fe:0011 Chic Technology Corp. Browser Mouse Bus 003 Device 003: ID 046d:c303 Logitech, Inc. Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 Here, my USB Logitech keyboard is Device 003 on Bus 003.   * Now we run lsusb with arguments -v -s [your USB keyboard device id in form Bus:Device], in my case, lsusb -v -s 003:003. Interface Descriptor: ........ bLength 9 bDescriptorType 4 This is an inserted line bInterfaceNumber 0 This is an inserted line bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Devices bInterfaceProtocol 1 Keyboard iInterface 0 ........ This is an inserted line Interface Descriptor: bLength 9 bDescriptorType 4 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Devices bInterfaceProtocol 0 None bInterfaceSubClass 0 No Subclass ........ iInterface 0 This is a replaced line So my USB keyboard has two interfaces (see bInterfaceNumber); the first one This is an inserted line (bInterfaceProtocol 0 None) - the additional keys. Hence the real USB is the real keyboard (bInterfaceProtocol 1 Keyboard), the second keyboard is: ..... N: Name="Logitech USB Keyboard" P: Phys=usb-00:10.1-1.1/input0 ..... H: Handlers=kbd The "P: Phys=" field (the physical descriptor/address) consorts of: 1. Bus type: "usb" 2. PCI function of the USB controller: "00:10.1 " ( for Ruby-2.6 "0000:00: This is an inserted line 10.1") 3. USB device id: "1.1" 4. The string: "/input" 5. Interface number: "0" This is a replaced line 5.2. Using hotplug with input.agent and input.rc Using the input.agent will allow you to manage input devices based on their drivers that are built in the kernel or are loaded before hotplug is This is an inserted line This is an inserted line The input.rc script will run the input.agent with appropriate arguments for available. ----------------------------------------------------------------------------- This is an inserted line The input agent uses 3 configuration files: This is a replaced line   * /etc/hotplug/event.conf Note Note   The explanations here are using Backstreet Ruby ( usb devices have PHYS_ID "usb-00:xx.x-..."), if you are running Ruby-2.6 for usb devices you should have PHYS_ID "usb-0000:00:xx.x-...." , but you should be able This is an inserted line to use the same configuration files both under Backstreet Ruby and To configure the keyboards you have to adjust /etc/hotplug/kbd.conf This is an inserted line console, I would have: # # keyboard configuration # # vt_name device_physicaly_location VT1 usb-00:10.1-1.1/input0 Or, if I want to use the USB keyboard for the primary Display and for the VGA # console: # keyboard configuration # # vt_name device_physicaly_location This is an inserted line VT1 isa0060/serio0/input0 you could also use "*.*" instead of the pci function of the USB controller: # # keyboard configuration # # vt_name device_physicaly_location VT0 usb-*.*-1.1/input0 VT1 isa0060/serio0/input0 This is an inserted line For mouse devices you have to edit /etc/hotplug/mouse.conf This is an inserted line # mouse device configuration # # # sym_link device_physicaly_location mouse0br usb-00:10.1-1.2/input0 mouse1br usb-*.*-2.7.*/input0 mouse2br isa0060/serio1/* and adjust the XFree configuration file. For the first mouse change ...... Option "Device" "/dev/input/mouse0" Option "Protocol" "IMPS/2" Option "ZAxisMapping" "4 5" ...... to : ...... Option "Protocol" "IMPS/2" This is a replaced line Option "ZAxisMapping" "4 5" ...... For the second mouse change Option "Protocol" "IMPS/2" ...... Option "Device" "/dev/input/mouse1" Option "ZAxisMapping" "4 5" ...... ...... This is an inserted line to : Option "Protocol" "IMPS/2" This is an inserted line Option "Device" "/dev/input/mouse1br" Option "ZAxisMapping" "4 5" This is an inserted line ...... and so on. For Event devices edit /etc/hotplug/event.conf # This is a replaced line # This is a replaced line event0br isa0060/serio0/* event1br isa0060/serio1/input0 event2br usb-*.*-3/input0 This is a replaced line instead of the real devices ----------------------------------------------------------------------------- 5.2.2. input.rc not executed you will find that hotplug could not configure these input input.rc script is started/executed at system start. In case the script is This is a replaced line Note Note   This area requires user feedback. Currently I have information only about Mandrake, where hotplug is not run as service. If your distribution runs hotplug as service this will be done automatically. If your distribution does not run hotplug as service you will have to modify your init scripts to run input.rc for you before XFree is started. You may add this at the end of your /etc/rc.d/rc.sysinit if [[ -f /proc/bus/console -o -n tmp=`uname -r | sed -n 's:ruby::p'` ]]; then if [ -x /etc/hotplug/input.rc ]; then /etc/hotplug/input.rc start if [ $? = 0 ]; then This is an inserted line action "Configuring cold plugged input devices" /bin/true else action "Configuring cold plugged input devices" /bin/false fi else if [ -f /etc/hotplug/input.rc ]; then action "Input: input.rc installed, but not executable. Please check the file permissions." /bin/false else action "Input: Failed to configure cold plugged devices - input.rc missing" /bin/false fi fi fi ----------------------------------------------------------------------------- 5.3. Using XFree with event interface support   * if you have input devices with different names, to use them with the same Xserver/screen wherever you plug or re-plug them.   * if you have input devices with the same names, to use them with the same Xserver/screen according to the USB port where you plug or re-plug them.   * the ability to use wild cards such as "*" and "?". Caution Caution   Currently hot-plugging doesn't seems to work properly. I have reports that it works when using the "Dev Name" option, but my primary purpose was to get it working with "Dev Phys" and this does not currently seem to work. "Why "Dev Phys"?" - because if one wants to setup a single system for 4,5 or more users it would be easier to get 4,5 or more pieces of the same keyboard/ mouse then to find the same number keyboards or mice but from different manufacturer or with different names, and i find configuring XFree for such number users is simpler when "Dev Phys" is used. This is a replaced line   This section is somewhat abandoned and is not tested under Ruby-2.6 as it didn't work reliably for me. For this to work you will have to use XFree with the patches for event following url: [http://people.debian.org/~warp/evdev/] http:// interface support, developed by Zephaniah Hull. You can find them at the people.debian.org/~warp/evdev/. To build from source you will need the following patches :   * 029_lnx_evdev.diff : The evdev core patch.   * 030_lnx_evdev_mouse.diff : The mouse side of the patch. This is a replaced line   * 031_lnx_evdev_keyboard.diff : The keyboard side of the patch. This is an inserted line The binaries for Debian include these patches. For hot-plugging you will also need the /etc/hotplug/input.agent , which you can find under the above address and in Appendix Scripts Then you have to configure XFree to use the event devices. The configuration section for a mouse should look something like this: Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Dev Name" "A4Tech USB Optical Mouse" Option "Protocol" "evdev" Option "Dev Phys" "usb-*/input0" Option "Buttons" "9" Option "ZAxisMapping" "6 7 8 9" EndSection This is an inserted line Section "InputDevice" The configuration section for a keyboard should look something like this: Identifier "Keyboard1" Driver "kbd" Option "Protocol" "evdev" Option "Dev Name" "SILITEK USB Keyboard" Option "Dev Phys" "usb-*/input0" Option "AutoRepeat" "250 30" Option "XkbRules" "xfree86" Option "XkbModel" "pc101" Option "XkbLayout" "dvorak" For Dev Name and Dev Phys, the wildcats "?" and "*" work, you MUST have at EndSection least one of the two, if you have both then the device must match on both, a This is a replaced line ----------------------------------------------------------------------------- 5.4. Using the "Phys" descriptor and USB devices Using the "Phys" descriptor of input devices simplifies a lot the configuration of input devices in XFree, especially when a bigger number of displays are used. way keyboard and mice devices are bound to a specified X display. You have to This is a replaced line use one USB hub with number of ports equal(or bigger) to the number of the X displays, to this hub are connected smaller (2-4 port) hubs (or keyboards with integrated hub). To the first port of the smaller (integrated) hub are connected the keyboards, to the second the mice (in case there are free ports This is an inserted line you can connect usb-audio devices to them :) ). This results in the following layout of the usb-id's in case the primary USB hub is the first USB device :   In the following explanations and examples I use for first device on the Note Note secondary(integrated) hub keyboard device because my keyboard is internally connected to the 1st port of the integrated hub. I assume this will apply for most of the keyboards with integrated hub, but in case the one you own uses different port you will have to make small adjustments.   * on the 1st port of the primary hub This is an inserted line This is an inserted line   + 1.1.1 USB keyboard   + 1.1.2 USB mouse   + (1.1.3 usb-audio/other usb device) This is an inserted line   * on the 2nd port   + 1.2 USB hub (integrated) This is an inserted line   + 1.2.1 USB keyboard   + 1.2.2 USB mouse   + (1.2.3 usb-audio/other usb device)   * on the 3rd port   + 1.3 USB hub (integrated)   + 1.3.1 USB keyboard   + 1.3.2 USB mouse   + (1.3.3 usb-audio/other usb device)   * on the 4th port   + 1.4 USB hub (integrated)   + 1.4.1 USB keyboard   + 1.4.2 USB mouse   + (1.4.3 usb-audio/other usb device) Based on this we can bind all devices connected to a specified USB port to a given X server. This is a replaced line 5.4.1. ... with Input Agent An example for a 4-user system using the "Phys" descriptor with Input Agent and USB input devices. This is an inserted line   Here the PCI function of the USB controller is masked by *.* so it should work both under Backstreet Ruby and Ruby-2.6 . If you use more then one USB controller you'll have to use different mask ( for example "usb-0*:xx.x-...") or specify the full PHYS_ID's : . For Backstreet Ruby you should have PHYS_ID "usb-00:xx.x-..." This is an inserted line For Ruby-2.6 you should have PHYS_ID "usb-0000:00:xx.x-...." We'll use the "vt[n]" parameter when starting X and the following configuration file for the keyboards(/etc/hotplug/kbd.conf ): # # # keyboard configuration # vt_name device_physicaly_location VT0 usb-*.*-1.1.1/input0 This is an inserted line VT1 usb-*.*-1.2.1/input0 VT2 usb-*.*-1.3.1/input0 VT3 usb-*.*-1.4.1/input0 For mouse devices the configuration file (/etc/hotplug/mouse.conf) will look # like this: # mouse device configuration # # sym_link device_physicaly_location mouse0br usb-*.*-1.1.2/input0 mouse1br usb-*.*-1.2.2/input0 mouse2br usb-*.*-1.3.2/input0 This is a replaced line and we have to adjust the XFree configuration files, so XFree uses the symbolic links instead of the actual devices. If you already configured This is a replaced line Change each "/dev/input/mouse[n]" to "/dev/input/mouse[n]br". For the first display: # ********************************************************************** ...... # Pointer section # ********************************************************************** Section "InputDevice" Identifier "Mouse1" Driver "mouse" This is a replaced line Option "Device" "/dev/input/mouse0br" # ChordMiddle is an option for some 3-button Logitech mice Option "Emulate3Buttons" # Option "ChordMiddle" EndSection ...... This is an inserted line For the second display: ...... # ********************************************************************** # Pointer section # ********************************************************************** Section "InputDevice" Driver "mouse" Identifier "Mouse1" Option "Protocol" "IMPS/2" Option "Device" "/dev/input/mouse1br" Option "ZAxisMapping" "4 5" This is a replaced line Option "Emulate3Buttons" # Option "ChordMiddle" EndSection ...... Or in case a single XFree configuration file is used: ...... This is a replaced line # Pointer section This is a replaced line Section "InputDevice" This is an inserted line Identifier "Mouse1" Driver "mouse" Option "Protocol" "IMPS/2" Option "Device" "/dev/input/mouse0br" This is an inserted line Option "ZAxisMapping" "4 5" # ChordMiddle is an option for some 3-button Logitech mice # Option "ChordMiddle" Option "Emulate3Buttons" EndSection Section "InputDevice" Identifier "Mouse2" Driver "mouse" Option "Protocol" "IMPS/2" Option "ZAxisMapping" "4 5" Option "Device" "/dev/input/mouse1br" Option "Emulate3Buttons" # ChordMiddle is an option for some 3-button Logitech mice # Option "ChordMiddle" EndSection ...... ----------------------------------------------------------------------------- 5.4.2. ... with XFree with event interface support This is an inserted line Using the "Dev Phys" option of XFree with event device support and USB input devices enables us to use almost identical configuration of the input devices for all X servers. The only difference will be in the part of the usb-id, which reflects the port of the primary USB hub. Note Note This is an inserted line This is a replaced line use a single XFree configuration file you have to adjust the identifiers. This is an inserted line The configuration for the input devices for the 1st display would look This is a replaced line something like this: Section "InputDevice" Identifier "Keyboard1" Option "Protocol" "evdev" Driver "kbd" Option "Dev Phys" "usb-*-1.1.1/input0" Option "AutoRepeat" "250 30" Option "XkbRules" "xfree86" Option "XkbLayout" "dvorak" EndSection Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "evdev" Option "Dev Phys" "usb-*-1.1.2/input0" Option "ZAxisMapping" "4 5" EndSection For the 2nd display something like this: Section "InputDevice" Driver "kbd" Identifier "Keyboard1" Option "Protocol" "evdev" Option "Dev Phys" "usb-*-1.2.1/input0" Option "AutoRepeat" "250 30" Option "XkbModel" "pc101" Option "XkbRules" "xfree86" Option "XkbLayout" "dvorak" EndSection Section "InputDevice" Identifier "Mouse1" This is a replaced line Option "Protocol" "evdev" Option "Dev Phys" "usb-*-1.2.2/input0" Option "ZAxisMapping" "4 5" EndSection For the 3rd display something like this: This is a replaced line Identifier "Keyboard1" Driver "kbd" Option "Protocol" "evdev" Option "Dev Phys" "usb-*-1.3.1/input0" Option "XkbRules" "xfree86" Option "XkbModel" "pc101" Option "AutoRepeat" "250 30" Option "XkbLayout" "dvorak" EndSection This is a replaced line This is an inserted line Identifier "Mouse1" Driver "mouse" Option "Protocol" "evdev" Option "Dev Phys" "usb-*-1.3.2/input0" Option "ZAxisMapping" "4 5" EndSection This is a replaced line You could also use the "?", so wherever you plug the primary hub, all displays will still have the desired configuration. Section "InputDevice" Identifier "Keyboard1" Driver "kbd" Option "Protocol" "evdev" This is a replaced line Option "AutoRepeat" "250 30" This is a replaced line This is an inserted line Option "XkbModel" "pc101" Option "XkbLayout" "dvorak" EndSection Section "InputDevice" Identifier "Mouse1" Option "Protocol" "evdev" Driver "mouse" Option "Dev Phys" "usb-*-?.1.2/input0" Option "ZAxisMapping" "4 5" EndSection ----------------------------------------------------------------------------- Chapter 6. Configuring display managers If you have successfully finished the installation and configuration of the This is a replaced line This is an inserted line Beside the graphical differences, xdm/kdm and gdm handle the X servers differently. Gdm will start the X servers in the order specified in it's configuration file (and stop them in the reverse order). Xdm/kdm will start This is a replaced line sessions). Also, restarting the gdm daemon means end for all X sessions, but This is an inserted line if you restart xdm/kdm when you are under X, your session won't be closed. This is a replaced line   * Using gdm could help you to retain the VGA console and prevents lock-ups This is a replaced line   * Using xdm/kdm allows you to switch it's configuration retaining your opened X session(of course the changes shouldn't affect the X server you are using). This is a replaced line Note Note   Have in mind that for the older Preferred Bus ID XFree Server (version -prefbusid x:x:x" where x:x:x is the Bus ID of the desired graphic card. 1) you have to specify the desired graphic card with parameter " Just append "-prefbusid x:x:x" with the correct Bus ID of the card you want to start right before the last argument vt[x]. ----------------------------------------------------------------------------- 6.1. Configuring xdm and kdm This is an inserted line If everything is working now, it's time to setup the automatic starting of X on all displays. For xdm and kdm you have to modify one single file. For a Red Hat-like system this would be /etc/X11/xdm/Xservers; for other distributions check whether this file exists. If not, find your XFree86 configuration directory, and in it you'll find xdm/Xservers.     * SuSE uses: Note Note   + /etc/X11/XF86Config   + /etc/X11/xdm/Xservers for xdm   + /etc/opt/kde3/share/config/kdm/Xservers for kdm you can make a backup copy of /etc/opt/.../kdm/Xservers and make a symbolic link from /etc/X11/xdm/Xservers to /etc/opt/../kdm/ Xservers, in order to use the same configuration file for xdm and kdm.   * Debian uses:   + /etc/kde3/kdm/Xservers for kdm you can make a backup copy of /etc/kde3/kdm/Xservers and make a symbolic link from /etc/X11/xdm/Xservers to /etc/kde3/kdm/Xservers, in order to use the same configuration file for xdm and kdm.   * Red Hat and Gentoo use:   + /etc/X11/XF86Config For every additional X server you should add a single line. You can copy the existing line, change the X server binary and display number, and append -xf86config [your configuration file]. My original xdm/Xservers: ##################################################################### # $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $ # # $XFree86: xc/programs/xdm/config/Xserv.ws.cpp,v 1.1.1.1.12.2 1998/10/04 15:23:14 hohndel Exp $ # # Xservers file, workstation prototype # # # This file should contain an entry to start the server on the # local display; if you have more than one display (not screen), This is an inserted line # you can add entries to the list (one per line). If you also This is a replaced line # you can add them here as well. Each X terminal line should This is a replaced line # :0 local /bin/nice -n -10 /usr/X11R6/bin/X :0 -deferglyphs 16 vt7 ###################################################################### and the modified version: ###################################################################### # $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $ # # # $XFree86: xc/programs/xdm/config/Xserv.ws.cpp,v 1.1.1.1.12.2 1998/10/04 15:23:14 hohndel Exp $ # Xservers file, workstation prototype # # local display; if you have more than one display (not screen), # you can add entries to the list (one per line). If you also # This file should contain an entry to start the server on the This is a replaced line # you can add them here as well. Each X terminal line should # look like: # XTerminalName:0 foreign # :0 local /bin/nice -n -10 /usr/X11R6/bin/X0 :0 -deferglyphs 16 vt7 :1 local /bin/nice -n -10 /usr/X11R6/bin/X1 :1 -xf86config /etc/X11/XF86Config-4.TNT2 vt17 This is an inserted line This is an inserted line ####################################################################### If you have more video cards just add more lines: :2 local /bin/nice -n -10 /usr/X11R6/bin/X2 :2 -xf86config /etc/X11/XF86Config-4.[your 3rd card] vt18 :3 local ..... If you use a single XFree configuration file : ###################################################################### # # $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $ # This is a replaced line # Xservers file, workstation prototype # This is a replaced line # local display; if you have more than one display (not screen), # This file should contain an entry to start the server on the # you can add entries to the list (one per line). If you also # have some X terminals connected which do not support XDMCP, # you can add them here as well. Each X terminal line should # XTerminalName:0 foreign # look like: # :0 local /bin/nice -n -10 /usr/X11R6/bin/X0 :0 -layout first-Xserver -deferglyphs 16 vt7 :1 local /bin/nice -n -10 /usr/X11R6/bin/X1 :1 -layout second-Xserver vt17 ####################################################################### Note Note   Under older versions of Backstreet Ruby (released before 7. Oct 2003) each console is represented by 8 tty's, so you should use: ..... :0 local /bin/nice -n -10 /usr/X11R6/bin/X0 :0 -deferglyphs 16 vt7 ..... Or if you have more video cards just add more lines: :2 local /bin/nice -n -10 /usr/X11R6/bin/X2 :2 -xf86config /etc/X11/XF86Config-4.[your 3rd card] vt16 This is a replaced line This is an inserted line If you use a single XFree configuration file : ................ :1 local /bin/nice -n -10 /usr/X11R6/bin/X1 :1 -layout second-Xserver vt9 ................ ----------------------------------------------------------------------------- 6.2. Configuring gdm Gdm, as a complete rewrite of xdm, uses its own configuration file, /etc/X11/ gdm/gdm.conf. You should locate the definitions of the local X servers and add additional X servers for the number of cards you have. This is an inserted line Note Note     * SuSE uses: This is an inserted line   + /etc/X11/XF86Config   + /etc/opt/gnome2/gdm/gdm.conf for gdm2   * Debian uses:   + /etc/gdm/gdm.conf for gdm /etc/X11/gdm/ is a symbolic link to /etc/gdm/, so you can use both paths. This is a replaced line   * Red Hat and Gentoo use: ----------------------------------------------------------------------------- Modifications: 6.2.1. Changes, Part 1 ....... [servers] # and they will always be started. Each line must start with a unique # These are the standard servers. You can add as many you want here # the 0 server is used. 1=Second ....... 0=Standard Here, you'll have only 0=Standard. For each additional X server you should add a definition, like here, for 1=Second. ----------------------------------------------------------------------------- 6.2.2. Changes, Part 2 This is an inserted line .............................. # Definition of the standard X server. name=Standard server [server-Standard] flexible=true command=/usr/X11R6/bin/X0 :0 -deferglyphs 16 -ac vt7 [server-Second] name=Second server flexible=true command=/usr/X11R6/bin/X1 :1 -deferglyphs 16 -xf86config /etc/X11/XF86Config-4.[your card] vt17 .............................. This is an inserted line And here, the exact definition of the command line for starting the X server, This is an inserted line very similar to the definitions in /etc/X11/xdm/Xservers (the definition of If you use a single XFree configuration file: This is an inserted line .............................. # Definition of the standard X server. [server-Standard] name=Standard server command=/usr/X11R6/bin/X0 :0 -layout first-Xserver -deferglyphs 16 -ac vt7 flexible=true [server-Second] name=Second server command=/usr/X11R6/bin/X1 :1 -layout second-Xserver -deferglyphs 16 vt17 flexible=true .............................. Note Note   Under older versions of Backstreet Ruby (released before 7. Oct 2003) each console is This is an inserted line represented by 8 tty's, so you should use: name=Standard server .............................. command=/usr/X11R6/bin/X0 :0 -deferglyphs 16 -ac vt7 name=Second server .............................. This is an inserted line .............................. If you use a single XFree configuration file: name=Standard server command=/usr/X11R6/bin/X0 :0 -layout first-Xserver -deferglyphs 16 -ac vt7 This is a replaced line command=/usr/X11R6/bin/X1 :1 -layout second-Xserver -deferglyphs 16 vt9 name=Second server .............................. ----------------------------------------------------------------------------- This is an inserted line Chapter 7. Tweaking it Adding customisation and automation. ----------------------------------------------------------------------------- 7.1. Using independent sound cards This is an inserted line This is an inserted line This is an inserted line Note Note   In case you do not use devfs, you may need to create additional device files. Take a look at [http://www.tldp.org/HOWTO/Sound-HOWTO/index.html] The Linux Sound HOWTO, for information on how to setup additional sound cards. ----------------------------------------------------------------------------- This is a replaced line We have to specify different sound devices for the different Xsessions/ Displays. This is done by using the following options of aRts daemon ([http:/ /www.arts-project.org/] http://www.arts-project.org/):   * By OSS-free sound driver: -D /dev/dsp[n] This is an inserted line where n is the number of the sound card. This is a replaced line   * By Alsa sound driver: -a alsa -D hw:[n],0 where n is sound card id. Add these lines to your Window Manager start-up script (of course, with the proper arguments for your setup): real_display=`echo $DISPLAY | sed "s/://" | sed "s/\..*//"` case "$real_display" in artsd -F 10 -S 4096 -D /dev/dsp -s 5 -m artsmessage -l 3 -f & ;; artsd -F 10 -S 4096 -D /dev/dsp1 -s 5 -m artsmessage -l 3 -f & ;; 2) artsd -F 10 -S 4096 -a alsa -D hw:4,0 -s 5 -m artsmessage -l 3 -f & ;; esac And at the end of the file: artsshell -q terminate Here is an example for /usr/X11R6/bin/startenlightenment: # License: GPL case "$real_display" in real_display=`echo $DISPLAY | sed "s/://" | sed "s/\..*//"` 0) artsd -F 10 -S 4096 -D /dev/dsp -s 5 -m artsmessage -l 3 -f & ;; artsd -F 10 -S 4096 -D /dev/dsp1 -s 5 -m artsmessage -l 3 -f & This is an inserted line This is a replaced line ;; 2) artsd -F 10 -S 4096 -a alsa -D hw:2,0 -s 5 -m artsmessage -l 3 -f & ;; This is an inserted line artsshell -q terminate This will start 3 aRts daemons for 3 X servers. 1. Daemon will use the first OSS sound device for the 1st X server. 2. Daemon will use the second OSS sound device for the 2nd X server. feedback). 3. Daemon will use the Alsa sound device for the 3rd X server (requires 7.2. Customising the login screen ----------------------------------------------------------------------------- 7.2.1. Using xdm Copy /etc/X11/xdm/Xsetup_0 to /etc/X11/xdm/Xsetup_1. For additional X servers, create the file(s) /etc/X11/xdm/Xsetup_[n], where n is the number of the X server starting from 0. 1. Modify the line containing the background image, to adjust the path to your image for the 2nd X server: if [ -r /usr/share/mdk/backgrounds/default.png -a -x /usr/bin/qiv ]; then .... else /usr/X11R6/bin/xsetroot -solid "#21449C" This is a replaced line This is an inserted line .... This is a replaced line Modified: if [ -r /usr/share/mdk/backgrounds/flower.jpg -a -x /usr/bin/qiv ]; then /usr/bin/qiv -z /usr/share/mdk/backgrounds/flower.jpg This is an inserted line else /usr/X11R6/bin/xsetroot -solid "#21449C" fi This is an inserted line .... You can also specify a different background color, with: #if [ -r /usr/share/mdk/backgrounds/flower.jpg -a -x /usr/bin/qiv ]; then .... # /usr/bin/qiv -z /usr/share/mdk/backgrounds/flower.jpg #else This is a replaced line #fi This is a replaced line This is a replaced line 2. Comment out the lines which may affect the primary X server, from: .... if [ -x /etc/X11/xinit.d/numlock ]; then /etc/X11/xinit.d/numlock & This is an inserted line fi .... to .... This is an inserted line #if [ -x /etc/X11/xinit.d/numlock ]; then #fi .... # /etc/X11/xinit.d/numlock & This is a replaced line 3. Inform xdm about the existence of Xsetup_1 by modifying /etc/X11/xdm/ xdm-config: This is a replaced line This is an inserted line DisplayManager._0.setup: /etc/X11/xdm/Xsetup_0 DisplayManager._0.reset: /etc/X11/xdm/TakeConsole DisplayManager._0.startup: /etc/X11/xdm/GiveConsole DisplayManager._0.startAttempts: 1 ! ...... Modified: ...... ! The following three resources set up display :0 as the console. DisplayManager._1.setup: /etc/X11/xdm/Xsetup_1 DisplayManager._0.setup: /etc/X11/xdm/Xsetup_0 DisplayManager._0.startup: /etc/X11/xdm/GiveConsole This is a replaced line DisplayManager._0.startAttempts: 1 ! This is a replaced line 4. Repeat the procedure for each additional X server. 5. Check here for additional customising options: [http:// www.linuxjournal.com/article.php?sid=3325] Linux-Journal Issue 68: Linux Apprentice: Customising the XDM Login Screen. 7.2.2. Using kdm -----------------------------------------------------------------------------   * I'm not really sure. This area requires feedback. Modify /usr/share/config/kdm/kdmrc, from: ...... [X-:0-Core] Authorize=true AutoLogin1st=true AutoLoginEnable=false This is a replaced line Startup=/etc/X11/xdm/GiveConsole This is an inserted line Setup=/etc/X11/xdm/Xsetup_0 This is a replaced line Authorize=true ...... to ...... [X-:0-Core] Authorize=true AutoLogin1st=true Reset=/etc/X11/xdm/TakeConsole AutoLoginEnable=false Setup=/etc/X11/xdm/Xsetup_0 Startup=/etc/X11/xdm/GiveConsole This is an inserted line [X-:1-Core] Authorize=true #AutoLogin1st=true #AutoLoginEnable=false #Reset=/etc/X11/xdm/TakeConsole Setup=/etc/X11/xdm/Xsetup_1 #[X-:1-Core] #Startup=/etc/X11/xdm/GiveConsole #Authorize=true This is an inserted line This is a replaced line   * Check for additional customising options at the KDE Help Center. This is a replaced line 7.2.3. Using gdm This requires gdmlogin to be used instead of gdmgreater, because using different themes for different displays is not yet implemented in gdm. In case you want to use gdm themes you'll have the same theme on all displays. 1. Switch to gdmlogin by making this changes in /etc/X11/gdm/gdm.conf From: ..... # Greeter for local (non-xdmcp) logins. Change gdmlogin to gdmgreeter to This is a replaced line This is a replaced line to ..... # Greeter for local (non-xdmcp) logins. Change gdmlogin to gdmgreeter to # get the new graphical greeter. Greeter=/usr/bin/gdmlogin This is an inserted line ..... 2. Copy the file /etc/X11/gdm/Init/Default to /etc/X11/gdm/Init/:0, and /etc This is a replaced line 3. Add these lines to use the background that kdm uses (you can use another if [ -r /usr/share/mdk/backgrounds/default.png -a -x /usr/bin/qiv ]; then image file as well, just change the full path to it): /usr/bin/qiv -z /usr/share/mdk/backgrounds/default.png else /usr/X11R6/bin/xsetroot -solid "#21449C" fi This is a replaced line /usr/X11R6/bin/xsetroot -solid "[your color]" Modified: #!/bin/sh /etc/X11/gdm/Init/:0 if [ -r /usr/share/mdk/backgrounds/default.png -a -x /usr/bin/qiv ]; then /usr/bin/qiv -z /usr/share/mdk/backgrounds/default.png else /usr/X11R6/bin/xsetroot -solid "#21449C" fi if [ -x /etc/X11/xinit/fixkeyboard ]; then This is a replaced line fi exit 0 This is an inserted line /etc/X11/gdm/Init/:1 #!/bin/sh if [ -r /usr/share/mdk/backgrounds/flower.jpg -a -x /usr/bin/qiv ]; then This is a replaced line else /usr/X11R6/bin/xsetroot -solid "#21449C" fi This is an inserted line if [ -x /etc/X11/xinit/fixkeyboard ]; then /etc/X11/xinit/fixkeyboard fi exit 0 This is a replaced line 4. Repeat the procedure for each additional X server, using file(s) /etc/X11 /gdm/Init/:[n], where n is the number of the display. 5. Check here for additional customising options: [http://www.ibiblio.org/ gdm-reference/] Gnome Display Manager Reference Manual. This is an inserted line ----------------------------------------------------------------------------- 7.3. 1st X server configuration file A small part of the Mandrake init scripts /etc/rc.d/rc.sysinit (you can This is an inserted line append it to yours if you are missing something similar): ----------------------------------------------------------------------------------- # (pixel) a kind of profile for XF86Config # if no XFree=XXX given on kernel command-line, restore XF86Config.standard for i in XF86Config XF86Config-4; do if [ -L "/etc/X11/$i" ]; then This is a replaced line This is a replaced line [ -r "/etc/X11/$i.$XFree" ] && ln -sf "$i.$XFree" "/etc/X11/$i" This is a replaced line done ----------------------------------------------------------------------------------- Move your XF86Config-4 file (the one for standard kernel) to XF86Config-4.standard, create a symbolic link from it to XF86Config-4, and move the XF86Config-4 file (the one for Backstreet Ruby) to XF86Config-4.bruby. For Ruby/Backstreet Ruby kernels, add to the append line in /etc/lilo.conf, or on boot prompt "XFree=bruby", leave the standard kernel This is a replaced line Booting with "XFree=standard" or without "XFree=" (boot prompt or lilo.conf) will result in linking XF86Config-4.standard to XF86Config-4; booting with This is an inserted line "XFree=bruby" will link XF86Config-4.bruby to XF86Config-4, so in both scenarios XFree can be started with the proper configuration file for the This is a replaced line And what about the other X servers? should use the other XFree configuration files only under Ruby/Backstreet Under a standard kernel you cannot use several independent X servers, so you Ruby - there is no need for different configuration files under standard & ----------------------------------------------------------------------------- 7.4. Number X servers started by Display managers Here is a modified version of the previous approach. Add this to your init scripts (I bet it's missing!): --------------------------------------------------------------------------------------- # #the same like XF86Config but for gdm.conf & Xservers # for i in xdm/Xservers gdm/gdm.conf; do DumbCon=`sed -n 's/.*dumbcon=\([0-9]*\).*/\1/p' /proc/cmdline` [ -n "$DumbCon" ] || DumbCon=0 [ -r "/etc/X11/$i.$DumbCon" ] && ln -sf "/etc/X11/$i.$DumbCon" "/etc/X11/$i" done fi This is a replaced line --------------------------------------------------------------------------------------- This will adjust the proper /etc/X11/xdm/Xservers and /etc/X11/gdm/gdm.config according to the boot line argument dumbcon=n (remember n+1= number of X users/sessions). You have to create the configuration files following these assumptions: "i" only stands for /etc/X11/xdm/Xserver and /etc/X11/gdm/gdm.conf.   * "i.0" is used for a single X server, when dumbcon=n is not specified, or dumbcon=0.   * "i.1" is used by the display manager when dumbcon=1 is specified.   * "i.2" is used by the display manager when dumbcon=2 is specified.   * "i.3" is used by the display manager when dumbcon=3 is specified. ...and so on. Therefore:   * "i.0" should contain the definition only of your original standard X server.   * "i.1" should contain the definitions for 2 X servers.   * "i.2" should contain the definitions for 3 X servers.   * ...and so on. If you boot without dumbcon=n or with dumbcon=0 (for example a standard kernel), your display manager will start a single X server with the corresponding XF86Config file. If you start with dumbcon=1 the display manager will automatically start 2 X servers. If you start with dumbcon=2, when booting is finished you'll get 3 login prompts on your 3 displays. Keep in mind that each X server should have it's own configuration file, and it should be specified in the display manager configuration file properly. Take a look at the configuration files before restarting with an activated This is a replaced line This is a replaced line Section 4.6, "For graphic cards without DRI"). In this case you will have to specify the correct layout instead of the correct XFree configuration file. ----------------------------------------------------------------------------- 7.5. Dynamically switching the number of X servers There is a very experimental GUI/CLI for dynamically switching the number of running X servers. It uses the automatic configuration of the display for the GUI. Backstreet Ruby to switch between 2, 3 or more X servers and a single X Once it is more tested and bug-free, you could, for example, use it under This is a replaced line could use the other monitors under Xinerama. Or one more funny example: you're simulating net gaming with a number of friends on your bruby Linux PC, This is an inserted line you have invested a bit more in an additional graphic card which is already configured, but you don't have enough money right now to buy one more monitor This is an inserted line and keyboard/mouse pair. One friend of yours comes and says, "Hey guys, monitor,keyboard and mouse." This is a replaced line check the current status at [http://karlovo.demon.co.uk/~svetlio/ruby-contrib /bruby-python/] http://karlovo.demon.co.uk/~svetlio/ruby-contrib/bruby-python cause you serious troubles. Please wait until it is more stable if you are not that familiar with Linux. If you feel comfortable enough under Linux, and /. But remember, it's not very tested, and if not configured properly it can think of yourself as a hacker, please help in testing it and making it better, bug-free and easy to configure. ----------------------------------------------------------------------------- 8.1. Hardware problems Chapter 8. Known problems While not exactly problems, some graphic cards do not work well, or even at all in multi-user environments. Compatibility list before buying video hardware. Sometimes secondary graphic card(s) (for now reported only by Nvidia owners) will refuse to start, even if they have worked flowlessly for months. One of This is a replaced line   * Running /usr/X11R6/bin/X -probeonly on the secondary card(s) before initializing/ starting XFree on the primary graphic card. Some examples: /usr/X11R6/bin/X -probeonly -layout X2 /usr/X11R6/bin/X -probeonly -layout X1 or: /usr/X11R6/bin/X -probeonly -xf86config /etc/X11/XF86Config-4.X2 This is a replaced line /usr/X11R6/bin/X -probeonly -xf86config /etc/X11/XF86Config-4.X1   * Switching the secondary graphic card to primary, starting the system (to initialize the card as primary), and reverting the card to secondary. This is an inserted line   * In case this is the only secondary card, you can try switching the order of the graphic cards permanently. ----------------------------------------------------------------------------- 8.2. Software problems some distributions." For details on solving software problems see Chapter 9, "Special notes on This is a replaced line 8.2.1. Incompatible userspace program:s This is a replaced line 1. gpm - freezy mouse under XFree86. With the current XFree86 you are losing VGA virtual consoles anyway. This is a replaced line Recommended: disable. This is a replaced line You can use RedHat 7.3 consolechars instead. This is an inserted line This is a replaced line This is a replaced line Recommended: disable. If you have to install new hardware and want to use this service, boot with standard kernel and start it manually. 4. Programs writing directly to tty's, like vcstime, cannot be used. This is a replaced line ----------------------------------------------------------------------------- 8.2.2. Tweaks needed 1. Mandrake 9.1 - /etc/init.d/numlock: You should change the lines including "/dev/tty[0-8]" to "/dev/tty[0-7]". 2. SuSE 8.1 - /etc/init.d/kbd: This is a replaced line This is a replaced line ----------------------------------------------------------------------------- Chapter 9. Special notes on some distributions 9.1. Mandrake Almost everything is easy to accomplish (probably because I've used it for 1. Just a small tweak in /etc/init.d/numlock: --- /etc/init.d/numlock.orig 2003-04-11 00:58:55.000000000 +0200 +++ /etc/init.d/numlock 2003-03-19 13:03:30.000000000 +0100 echo @@ -21,14 +21,14 @@ touch $SYSCONF_FILE - for tty in /dev/tty[0-8]; do + for tty in /dev/tty[0-7]; do done setleds -D +num < $tty This is an inserted line This is a replaced line - for tty in /dev/tty[0-8]; do gprintf "Disabling numlocks on ttys: " + for tty in /dev/tty[0-7]; do This is a replaced line This is an inserted line ----------------------------------------------------------------------------- This is an inserted line 9.2. Red Hat 1. Replacing sysfont with consolechars. < needs to be written > Rebuild console-tools-19990829-40.src.rpm using rpmbuild --rebuild console-tools-19990829-40.src.rpm. You can find the source rpm on [http:/ /www.rpmfind.net] http://www.rpmfind.net). Then install it: rpm -Uvh /usr/src/redhat/RPMS/i386/console-tools-19990829-40.i386.rpm This is a replaced line I still seem to have some kind of problem, because on the console I always get: findfont no such file or directory unable to setfont xxx But everything else seems okay. 9.3. Debian There are no known problems. This is an inserted line 9.4. SuSE 1. In /etc/init.d/kbd, add this line in the very beginning of the file: After modifications: #! /bin/sh # Copyright (c) 1995-2001 SuSE GmbH Nuernberg, Germany. # Author: Burchard Steinbild # Werner Fink # # # /etc/init.d/kbd # # and symbolic its link # /sbin/rckbd # ### BEGIN INIT INFO # Provides: kbd # Required-Start: $remote_fs # Required-Stop: # X-SuSE-Should-Start: fbset serial # X-SuSE-Should-Stop: # Default-Start: 1 2 3 5 S # Default-Stop: ### END INIT INFO # Description: Keyboard settings (don't disable!) . /etc/rc.status . /etc/sysconfig/console . /etc/sysconfig/keyboard MACHINE=`/bin/uname -m 2> /dev/null` # Test if we have a serial console. if [ "$MACHINE" = "sparc" -o "$MACHINE" = "sparc64" ]; then (test -c /dev/tty1 && > /dev/tty1 ) > /dev/null 2>&1 || exit 0 fi # to a console before some console settings apply. # leave it to the user to read this comment and put NON_SUSE_KERNEL="yes" # into /etc/sysconfig/console # We have no magic to find out about this (at boot time), so we KBDBASE="/usr/share/kbd" This is an inserted line This is a replaced line KTABLE=${KTABLE##*/} # # first search the wanted keytable. # if [ $MACHINE = ppc -o $MACHINE = ppc64 ]; then test -f /proc/cpuinfo || mount -n -t proc proc /proc 2>/dev/null while read line; do This is a replaced line ...... 2. Hardware scans sometimes cause problems. This is an inserted line This is an inserted line This is an inserted line Recommended: disable. If you have to install new hardware and want to use this service, boot with standard kernel and start it manually. ----------------------------------------------------------------------------- This is a replaced line Have some comments? Send them to Svetoslav Slavtchev, . Difficulty understanding the HOWTO? Some parts are not clear? Drop a line to the above address. This is a replaced line contact me or the linuxconsole mailing list. be (from a running Backstreet Ruby kernel): Please send as many details as possible, the most important information would   * output from dmesg This is an inserted line   * output from lsmod   * output from cat /proc/bus/console/*/*   * contents of /proc/bus/input/devices   * contents of /proc/bus/usb/devices   * contents of the XFree86 log files /var/log/XFree86.[n].log   * contents of the XFree configuration file(s) /etc/X11/XF86Config(-4) This is an inserted line You got it running? Congratulations! Drop a line, give some details on your configuration and attach your XFree configuration files. This is an inserted line This is an inserted line This is an inserted line ----------------------------------------------------------------------------- Appendix A. Video Compatibility list This is an extract from the Video Compatibility list at the Backstreet Ruby home page. ----------------------------------------------------------------------------- This is a replaced line A.1. Graphic card pairs/triples that work perfectly A.1.1. Modified X server not needed Voodoo Graphics (glide) + Voodoo 3 (pci)(tdfx) This is a replaced line Voodoo Graphics (glide) + Riva TNT2 M64 (agp)(nvidia) ----------------------------------------------------------------------------- A.1.2. Modified X server needed ATI Radeon 7000(AGP)+ Matrox Mystique (PCI) AGP S3 Inc. 86c368[Trio 3D/2X]+Matrox MGA1064SG[Mystique] (PCI) Nvidia cards Riva TNT (PCI+PCI+AGP) Riva TNT2 M64 (pci)(nvidia) + Riva TNT2 M64 (pci)(nvidia) Riva TNT2 M64 (agp)(nvidia) + GeForce4MX(PCI) Nvidia GeForce2MX(PCI) + GeForce2MX(PCI) + GeForce2MX(PCI) + GeForce2MX(PCI) Works fine. DRI + Nvidia GLX works too. Voodoo 3 (pci)(tdfx) + Riva TNT2 M64 (agp)(nvidia) This is an inserted line ATI Radeon 7500(AGP) + Nvidia TNT2(PCI) ----------------------------------------------------------------------------- A.2. Graphic card pairs/triples that work, but with some glitches This is an inserted line This is a replaced line manager. You'll have to abstain from using xdm or kdm, as they start the X servers at the same time. This is a replaced line   * The XFree-4.3-prefbusid patch/binary fixes most of the problems. In case the X servers are started in the right order there are no lock ups. Nvidia TNT2(AGP) + Matrox Mystique(PCI) Nvidia TNT2(AGP) + S3 VIRGE/DX(PCI) Nvidia GeForce4MX440(AGP) + TNT2M64(PCI) + TNT2M64(PCI) This is an inserted line Matrox MGAG400(AGP) + Matrox MGA1064SG[Mystique]PCI Matrox MGAG450DH(AGP) + ATI Mach 64(PCI) This is a replaced line Matrox MGAG550DH(AGP) + Riva TNT2-M64(PCI) Matrox MGAG550DH(AGP) + Geforce4 420(PCI) This is an inserted line ----------------------------------------------------------------------------- Appendix B. Example configuration files For more examples visit [http://karlovo.demon.co.uk/~svetlio/examples/] http: //karlovo.demon.co.uk/~svetlio/examples/. ----------------------------------------------------------------------------- B.1. XFree86 ----------------------------------------------------------------------------- B.1.1. 1st XFree server configuration file This is a replaced line # File generated by XFdrake. # ********************************************************************** # Refer to the XF86Config(4/5) man page for details about the format of # this file. # ********************************************************************** Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" # Multiple FontPath entries are allowed (they are concatenated together) # By default, Mandrake 6.0 and later now use a font server independent of # the X server to render fonts. EndSection This is an inserted line # ********************************************************************** # Server flags section. # ********************************************************************** Section "ServerFlags" # Uncomment this to cause a core dump at the spot where a signal is # received. This may leave the console in an unusable state, but may This is a replaced line #NoTrapSignals # Uncomment this to disable the server abort sequence # This allows clients to receive this key event. #DontZap This is a replaced line # sequences. This allows clients to receive these key events. #DontZoom # Uncomment this to disable the / mode switching # This allows the server to start up even if the # mouse device can't be opened/initialised. AllowMouseOpenFail This is a replaced line # ********************************************************************** # ********************************************************************** # Keyboard section This is a replaced line This is an inserted line # ********************************************************************** Section "InputDevice" Identifier "Keyboard1" Driver "Keyboard" Option "AutoRepeat" "250 30" Option "XkbRules" "xfree86" Option "XkbModel" "pc105" Option "XkbLayout" "de(nodeadkeys)" EndSection This is a replaced line # ********************************************************************** # ********************************************************************** Section "InputDevice" Identifier "Mouse1" Driver "mouse" This is an inserted line Option "Protocol" "IMPS/2" Option "Device" "/dev/input/mouse1" # Option "Device" "/dev/psaux" Option "ZAxisMapping" "4 5" This is an inserted line # ChordMiddle is an option for some 3-button Logitech mice # Option "ChordMiddle" Option "Emulate3Buttons" EndSection Section "Module" # This loads the DBE extension module. Load "dbe" Load "glx" # Load "dga" Load "extmod" Load "dri" # pass two from mga mailing-lists # Load "pex5" Load "bitmap" Load "record" # Load "xie" Load "int10" Load "vbe" # end pass two mga mailing-lists # This loads the Video for Linux module. Load "v4l" # This loads the miscellaneous extensions module, and disables # initialisation of the XFree86-DGA extension within that module. SubSection "extmod" #Option "omit xfree86-dga" EndSubSection # This loads the Type1 and FreeType font modules Load "type1" EndSection Load "freetype" Section "DRI" This is an inserted line Mode 0666 EndSection # ********************************************************************** # Monitor section # ********************************************************************** # Any number of monitor sections may be present Section "Monitor" Identifier "Generic|Monitor that can do 1600x1200 at 70 Hz" ModelName "Unknown" This is an inserted line # HorizSync is in kHz unless units are specified. # HorizSync may be a comma separated list of discrete values, or a # comma separated list of ranges of values. # NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S # USER MANUAL FOR THE CORRECT NUMBERS. HorizSync 30-98 # VertRefresh is in Hz unless units are specified. # VertRefresh may be a comma separated list of discrete values, or a # NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S # comma separated list of ranges of values. # This is a set of extended mode timings typically used for laptop, # These are available along with standard mode timings. # Sony Vaio C1(X,XS,VE,VN)? This is a replaced line ModeLine "1024x480" 65.00 1024 1032 1176 1344 480 488 494 563 -hsync -vsync This is an inserted line This is an inserted line # 768x576 @ 79 Hz, 50 kHz hsync ModeLine "768x576" 50.00 768 832 846 1000 576 590 595 630 # 768x576 @ 100 Hz, 61.6 kHz hsync This is a replaced line EndSection Section "Monitor" Identifier "monitor2" This is an inserted line This is a replaced line ModelName "Unknown" HorizSync 30-98 VertRefresh 50-160 EndSection Section "Monitor" Identifier "monitor3" VendorName "Unknown" ModelName "Unknown" HorizSync 31.5-60.0 VertRefresh 56.0-75.0 This is a replaced line This is an inserted line This is an inserted line # ********************************************************************** This is a replaced line Identifier "Generic VGA" Driver "vga" EndSection Section "Device" Identifier "g550_1" VendorName "" BoardName "" Driver "mga" # Clock lines # Uncomment following option if you see a big white block This is a replaced line This is an inserted line This is an inserted line This is an inserted line # Option "sw_cursor" Option "AGPMode" "4" # Option "HWCursor" "Off" Option "HWCursor" "On" Option "MGASDRAM" "On" Option "DPMS" "Off" This is an inserted line This is an inserted line # Screen 0 BusID "PCI:1:0:0" EndSection Section "Device" Identifier "g550_2" VendorName "" BoardName "" # Clock lines Driver "mga" # Uncomment following option if you see a big white block # instead of the cursor! # Option "sw_cursor" Option "AGPMode" "4" This is an inserted line # Option "HWCursor" "Off" Option "DPMS" "Off" Option "HWCursor" "On" # Screen 1 BusID "PCI:1:0:0" EndSection # ********************************************************************** # Screen sections # ********************************************************************** Section "Screen" Device "g550_1" Monitor "monitor2" Subsection "Display" Modes "1280x1024" "1024x768" "800x600" "640x480" Depth 8 EndSubsection ViewPort 0 0 Subsection "Display" Depth 15 Modes "1280x1024" "1024x768" "800x600" "640x480" ViewPort 0 0 EndSubsection Subsection "Display" Depth 16 Modes "1280x1024" "1024x768" "800x600" "640x480" Subsection "Display" Modes "1280x1024" "1024x768" "800x600" "640x480" Depth 24 ViewPort 0 0 EndSubsection EndSection Section "ServerLayout" Identifier "layout1" This is a replaced line Option "SingleCard" "true" InputDevice "Mouse1" "CorePointer" InputDevice "Keyboard1" "CoreKeyboard" EndSection ----------------------------------------------------------------------------- This is an inserted line B.1.2. 2nd XFree server configuration file # File generated by XFdrake. # Refer to the XF86Config(4/5) man page for details about the format of # this file. # ********************************************************************** # ********************************************************************** This is a replaced line Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" This is an inserted line # Multiple FontPath entries are allowed (they are concatenated together) # By default, Mandrake 6.0 and later now use a font server independent of ModulePath "/usr/X11R6/libNV/modules" # the X server to render fonts. This is an inserted line This is an inserted line # ********************************************************************** # Server flags section. # ********************************************************************** This is a replaced line # Uncomment this to cause a core dump at the spot where a signal is # received. This may leave the console in an unusable state, but may This is a replaced line #NoTrapSignals # Uncomment this to disable the server abort sequence # This allows clients to receive this key event. #DontZap This is a replaced line # Uncomment this to disable the / mode switching # sequences. This allows clients to receive these key events. #DontZoom # This allows the server to start up even if the # mouse device can't be opened/initialised. AllowMouseOpenFail EndSection This is an inserted line # Input devices # ********************************************************************** # ********************************************************************** This is a replaced line # ********************************************************************** Section "InputDevice" This is an inserted line Identifier "Keyboard1" Driver "Keyboard" Option "AutoRepeat" "250 30" Option "XkbRules" "xfree86" Option "XkbModel" "pc105" Option "XkbLayout" "de(nodeadkeys)" EndSection # ********************************************************************** # Pointer section # ********************************************************************** Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "PS/2" Option "Device" "/dev/input/mouse0" Option "Emulate3Buttons" # Option "ZAxisMapping" "4 5" # ChordMiddle is an option for some 3-button Logitech mice # Option "ChordMiddle" EndSection Section "Module" Load "dbe" Load "glx" Load "vbe" Load "int10" # This loads the Video for Linux module. # Load "v4l" # initialisation of the XFree86-DGA extension within that module. # This loads the miscellaneous extensions module, and disables SubSection "extmod" #Option "omit xfree86-dga" EndSubSection # This loads the Type1 and FreeType font modules Load "type1" This is an inserted line This is an inserted line Load "freetype" EndSection #Section "DRI" This is a replaced line This is an inserted line #EndSection # ********************************************************************** # Monitor section This is a replaced line # Any number of monitor sections may be present Section "Monitor" This is a replaced line VendorName "Unknown" This is a replaced line # HorizSync is in kHz unless units are specified. # HorizSync may be a comma separated list of discrete values, or a # NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S # comma separated list of ranges of values. HorizSync 30-98 # VertRefresh is in Hz unless units are specified. # comma separated list of ranges of values. # VertRefresh may be a comma separated list of discrete values, or a # NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S # USER MANUAL FOR THE CORRECT NUMBERS. VertRefresh 50-160 # This is a set of extended mode timings typically used for laptop, # TV fullscreen mode or DVD fullscreen output. # These are available along with standard mode timings. # 1024x480 @ 85.6 Hz, 48 kHz hsync # Sony Vaio C1(X,XS,VE,VN)? ModeLine "1024x480" 65.00 1024 1032 1176 1344 480 488 494 563 -hsync -vsync This is a replaced line ModeLine "768x576" 50.00 768 832 846 1000 576 590 595 630 # 768x576 @ 100 Hz, 61.6 kHz hsync This is a replaced line This is a replaced line Section "Monitor" VendorName "Unknown" This is an inserted line Identifier "monitor2" ModelName "Unknown" This is an inserted line # VertRefresh 50-160 # HorizSync 30-98 HorizSync 30-50 VertRefresh 50-120 This is an inserted line EndSection # ********************************************************************** # Graphics device section Section "Device" Identifier "Generic VGA" Driver "vga" Section "Device" Identifier "nv" VendorName "" This is an inserted line BoardName "" Driver "nvidia" # Clock lines # Uncomment following option if you see a big white block # Option "sw_cursor" # instead of the cursor! Option "ConnectedMonitor" "CRT" Option "UseInt10Module" "off" Option "IgnoreEDID" "off" Option "HWCursor" "on" Option "DPMS" "Off" Option "NoLogo" "On" BusID "PCI:0:10:0" EndSection # Screen sections # ********************************************************************** # ********************************************************************** Section "Screen" Identifier "screen1" Device "nv" Monitor "monitor2" DefaultColorDepth 24 Subsection "Display" Modes "800x600" "640x480" Depth 8 ViewPort 0 0 EndSubsection Subsection "Display" Depth 15 Modes "800x600" "640x480" ViewPort 0 0 Subsection "Display" Depth 16 Modes "800x600" "640x480" ViewPort 0 0 EndSubsection Subsection "Display" This is an inserted line Depth 24 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 EndSubsection Subsection "Display" Depth 32 Modes "1280x1024" "800x600" "640x480" ViewPort 0 0 EndSubsection This is an inserted line Section "ServerLayout" This is a replaced line Screen "screen1" Option "SingleCard" "true" InputDevice "Mouse1" "CorePointer" EndSection This is an inserted line ----------------------------------------------------------------------------- B.2. Display managers ----------------------------------------------------------------------------- This is a replaced line /etc/X11/xdm/Xservers.0 # $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $ # # This is an inserted line # $XFree86: xc/programs/xdm/config/Xserv.ws.cpp,v 1.1.1.1.12.2 1998/10/04 15:23:14 hohndel Exp $ # Xservers file, workstation prototype # # # This file should contain an entry to start the server on the # local display; if you have more than one display (not screen), # you can add them here as well. Each X terminal line should This is a replaced line # look like: # XTerminalName:0 foreign # :0 local /bin/nice -n -10 /usr/X11R6/bin/X -deferglyphs 16 vt7 /etc/X11/xdm/Xservers.1 # $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $ # # This is a replaced line # # Xservers file, workstation prototype # This file should contain an entry to start the server on the This is an inserted line # you can add entries to the list (one per line). If you also # local display; if you have more than one display (not screen), # you can add them here as well. Each X terminal line should # look like: # have some X terminals connected which do not support XDMCP, :0 local /bin/nice -n -10 /usr/X11R6/bin/X0 :0 -deferglyphs 16 vt7 # :1 local /bin/nice -n -10 /usr/X11R6/bin/X1 :1 -xf86config /etc/X11/XF86Config-4.X1 -deferglyphs 16 vt17 (Not really used by me.) # $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $ This is an inserted line /etc/X11/xdm/Xservers.2 This is a replaced line # # $XFree86: xc/programs/xdm/config/Xserv.ws.cpp,v 1.1.1.1.12.2 1998/10/04 15:23:14 hohndel Exp $ # # Xservers file, workstation prototype # # This file should contain an entry to start the server on the # local display; if you have more than one display (not screen), # you can add entries to the list (one per line). If you also # have some X terminals connected which do not support XDMCP, # you can add them here as well. Each X terminal line should This is a replaced line # XTerminalName:0 foreign :0 local /bin/nice -n -10 /usr/X11R6/bin/X0 :0 -deferglyphs 16 vt7 :1 local /bin/nice -n -10 /usr/X11R6/bin/X1 :1 -xf86config /etc/X11/XF86Config-4.X1 -deferglyphs 16 vt17 :2 local /bin/nice -n -10 /usr/X11R6/bin/X2 :2 -xf86config /etc/X11/XF86Config-4.X2 -deferglyphs 16 vt18 ----------------------------------------------------------------------------- This is a replaced line B.2.2. gdm /etc/X11/gdm/gdm.conf.0 # GDM Configuration file. You can use gdmsetup program to graphically # edit this, or you can optionally just edit this file by hand. Note that # gdmsetup does not tweak every option here, just the ones most users # would care about. Rest is for special setups and distro specific # the daemon so that it restarts: (Assuming you have not changed PidFile) # kill -USR1 `cat /var/run/gdm.pid` # (HUP will make gdm restart immediately while USR1 will make gdm not kill # existing sessions and will only restart gdm after all users log out) # # do the above for you. # You can also use the gdm-restart and gdm-safe-restart scripts which just # # Have fun! - George [daemon] # Automatic login, if true the first local screen will automatically logged # in as user as set with AutomaticLogin key. AutomaticLoginEnable=false AutomaticLogin= # Timed login, useful for kiosks. Log in a certain user after a certain # amount of time TimedLoginEnable=false TimedLogin= TimedLoginDelay=30 # A comma separated list of users that will be logged in without having # to authenticate on local screens (not over xdmcp). Note that 'root' # is ignored and will always have to authenticate. # If you are having trouble with using a single server for a long time and LocalNoPasswordUsers= AlwaysRestartServer=false # The gdm configuration program that is run from the login screen, you should # probably leave this alone Configurator=/usr/sbin/gdmsetup --disable-sound --disable-crash-dialog GnomeDefaultSession=/usr/share/gnome/default.session # The chooser program. Must output the chosen host on stdout, probably you # should leave this alone # Default path to set. The profile scripts will likely override this This is an inserted line Chooser=/usr/bin/gdmchooser This is an inserted line DefaultPath=/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/local/bin:/usr/bin RootPath=/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/local/bin:/usr/bin # Default path for root. The profile scripts will likely override this This is a replaced line # Greeter for local (non-xdmcp) logins. Change gdmlogin to gdmgreeter to # get the new graphical greeter. # Greeter for xdmcp logins, usually you want a less graphically intensive Greeter=/usr/bin/gdmgreeter # greeter here so it's better to leave this with gdmlogin # User and group that gdm should run as. Probably should be gdm and gdm and RemoteGreeter=/usr/bin/gdmlogin This is an inserted line # someone too privilaged will get a kick in the ass. This should have # access to only the gdm directories and files. User=gdm Group=gdm # To try to kill all clients started at greeter time or in the Init script. KillInitClients=true This is an inserted line # doesn't always work, only if those clients have a window of their own LogDir=/var/lib/gdm PostSessionScriptDir=/etc/X11/gdm/PostSession/ PreSessionScriptDir=/etc/X11/gdm/PreSession/ # Distributions: If you have some script that runs an X server in say # VGA mode, allowing a login, could you please send it to me? # if X keeps crashing on us we run this script. The default one does a bunch FailsafeXServer= # of cool stuff to figure out what to tell the user and such and can XKeepsCrashing=/etc/X11/gdm/XKeepsCrashing # run an X configuration program. This is a replaced line # separated by a semicolon and gdm will use the first one it can find RebootCommand=/sbin/shutdown -r now;/usr/sbin/shutdown -r now HaltCommand=/usr/bin/poweroff;/sbin/poweroff;/sbin/shutdown -h now;/usr/sbin/shutdown -h now This is an inserted line # Probably should not touch the below this is the standard setup SuspendCommand= ServAuthDir=/var/lib/gdm SessionDir=/etc/X11/gdm/Sessions/ # Better leave this blank and HOME will be used. You can use syntax ~/ below # to indicate home directory of the user UserAuthDir= # Fallback if home directory not writable UserAuthFBDir=/tmp UserAuthFile=.Xauthority # The X server to use if we can't figure out what else to run. StandardXServer=/usr/X11R6/bin/X # The maximum number of flexible X servers to run. FlexibleXServers=5 # the X nest command This is an inserted line Xnest=/usr/X11R6/bin/Xnest -name Xnest # Automatic VT allocation. Right now only works on Linux. This way This is a replaced line FirstVT=7 # is causing problems. VTAllocation=false # If any distributions ship with this one off, they should be shot [security] # this is only local, so it's only for say kiosk use, when you # want to minimize possibility of breakin AllowRoot=true AllowRemoteRoot=true # If you want to be paranoid, turn this one off AllowRemoteAutoLogin=false RelaxPermissions=0 RetryDelay=3 # Maximum size of a file we wish to read. This makes it hard for a user to DoS us UserMaxFile=65536 # by using a large file. # Maximum size of the session file. This is larger because it matters less as we # never keep it all in memory. Just has an upper limit so that we don't go into too # long of a loop SessionMaxFile=524388 # XDMCP is the protocol that allows remote login. If you want to log into # gdm remotely (I'd never turn this on on open network, use ssh for such # remote usage that). You can then run X with -query to log in, This is an inserted line This is a replaced line # type at the bottom of this config file. [xdmcp] # Distributions: Ship with this off. It is never a safe thing to leave # out on the net. Alternatively you can set up /etc/hosts.allow and # /etc/hosts.deny to only allow say local access. This is an inserted line Enable=false # Honour indirect queries, we run a chooser for these, and then redirect This is an inserted line # the user to the chosen host. Otherwise we just log the user in locally. HonorIndirect=true # Maximum pending requests MaxPending=4 MaxPendingIndirect=4 # Maximum open XDMCP sessions at any point in time MaxSessions=16 This is an inserted line MaxWait=15 MaxWaitIndirect=15 This is an inserted line # host Port=177 # The port. 177 is the standard port so better keep it that way # Willing script, none is shipped and by default we'll send This is a replaced line # the chooser can display it. You could for example send load, # output of this script will be sent as status of this host so that This is an inserted line # or mail details for some user, or some such. Willing=/etc/X11/gdm/Xwilling [gui] # Of course assuming that gtk got installed in the same prefix, # if not change this. # The 'theme'. By default we're using the default gtk theme GtkRC=/usr/share/themes/Default/gtk/gtkrc # Maximum size of an icon, larger icons are scaled down MaxIconWidth=128 MaxIconHeight=128 # Greeter has a nice title bar that the user can move TitleBar=true # Configuration is available from the system menu of the greeter ConfigAvailable=true # Face browser is enabled. This only works currently for the # standard greeter as it is not yet enabled in the graphical greeter. Browser=true # The default picture in the browser DefaultFace=/usr/share/mdk/faces/default.png This is an inserted line Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,gdm,postgres,pvm,rpm This is an inserted line # As an alternative to the above this is the minimum uid to show MinimalUID=500 # If user or user.png exists in this dir it will be used as his picture GlobalFaceDir=/usr/share/faces/ # Icon we use Icon=/usr/share/pixmaps/gdm.png # File which contains the locale we show to the user. Likely you want to use This is a replaced line LocaleFile=/etc/X11/gdm/locale.alias This is an inserted line # Logo shown in the standard greeter Logo=/usr/share/pixmaps/gdm-screen.png # The standard greeter should shake if a user entered the wrong username or # password. Kind of cool looking Quiver=true # The system menu is shown in the greeter SystemMenu=true # and wish to have this translated you can have entries such as # Just make sure the string is in utf-8 # Welcome[cs]=Vitejte na %n # Don't allow user to move the standard greeter window. Only makes sense Welcome=Welcome to %n # if TitleBar is on LockPosition=false # Set a position rather then just centering the window. If you enter # negative values for the position it is taken as an offset from the # right or bottom edge. This is a replaced line PositionX=0 PositionY=0 # Xinerama screen we use to display the greeter on. Not for true # multihead, currently only works for Xinerama. XineramaScreen=0 This is a replaced line # Type can be 0=None, 1=Image, 2=Color BackgroundType=2 BackgroundImage= BackgroundScaleToFit=true BackgroundColor=#21449c # XDMCP session should only get a color, this is the sanest setting since # you don't want to take up too much bandwidth BackgroundRemoteOnlyColor=true # something like an xscreensaver hack or some such. # Program to run to draw the background in the standard greeter. Perhaps # if this is true then the background program is run always, otherwise # it is only run when the BackgroundType is 0 (None) RunBackgroundProgramAlways=false ShowGnomeChooserSession=false # Show the chooser (you can choose a specific saved gnome session) session # Show the Failsafe sessions. These are much MUCH nicer (focus for xterm for # example) and more failsafe then those supplied by scripts so distros should # use this rather then just running an xterm from a script. ShowGnomeFailsafeSession=false ShowXtermFailsafeSession=false # Always use 24 hour clock no matter what the locale. Use24Clock=false # Use circles in the password field. Looks kind of cool actually # These two keys are for the new greeter. Circles is the standard # shipped theme GraphicalThemeDir=/usr/share/gdm/themes/ GraphicalTheme=mdk # The chooser is what's displayed when a user wants an indirect XDMCP [chooser] # session DefaultHostImg=/usr/share/pixmaps/nohost.png # Default image for hosts # Directory with host images, they are named by the hosts: host or host.png # Time we scan for hosts (well only the time we tell the user we are HostImageDir=/usr/share/hosts/ # scanning actually) ScanTime=3 # A comma separated lists of hosts to automatically add (if they answer to # a query of course). You can use this to reach hosts that broadcast cannot Hosts= This is an inserted line This is a replaced line [debug] # This will enable debugging into the syslog, usually not neccessary # and it creates a LOT of spew of random stuff to the syslog. However it # can be useful in determining when something is going very wrong. Enable=false [servers] # These are the standard servers. You can add as many you want here # and they will always be started. Each line must start with a unique This is a replaced line # the 0 server is used. This is a replaced line #1=Standard # arguments if VTAllocation is on, and set FirstVT to be the first vt # Note the VTAllocation and FirstVT keys on Linux. Don't add any vt # available that your gettys don't grab (gettys are usually dumb and grab # all Linux distributions. VTAllocation is not currently implemented on This is an inserted line # even a vt that has already been taken). Using 7 will work pretty much for This is a replaced line # send patches. X servers will just not get any extra arguments then. # #Note: If you want to run an X terminal you could add an X server such as this #0=Terminal -query serverhostname # or for a chooser (optionally serverhostname could be localhost) #0=Terminal -indirect serverhostname This is a replaced line [server-Standard] # Definition of the standard X server. name=Standard server command=/usr/X11R6/bin/X0 :0 -deferglyphs 16 vt7 flexible=true # To use this server type you should add -query host or -indirect host This is an inserted line # to the command line [server-Terminal] name=Terminal server # Add -terminate to make things behave more nicely # Make this not appear in the flexible servers (we need extra params command=/usr/X11R6/bin/X -terminate # anyway, and terminate would be bad for xdmcp) This is an inserted line flexible=false # Not local, we do not handle the logins for this X server handled=false This is a replaced line /etc/X11/gdm/gdm.conf.1 This is an inserted line # GDM Configuration file. You can use gdmsetup program to graphically # edit this, or you can optionally just edit this file by hand. Note that # gdmsetup does not tweak every option here, just the ones most users # would care about. Rest is for special setups and distro specific # tweaks. If you edit this file, you should send the HUP or USR1 signal to # the daemon so that it restarts: (Assuming you have not changed PidFile) # kill -USR1 `cat /var/run/gdm.pid` # (HUP will make gdm restart immediately while USR1 will make gdm not kill # existing sessions and will only restart gdm after all users log out) # # You can also use the gdm-restart and gdm-safe-restart scripts which just # do the above for you. # Have fun! - George [daemon] # Automatic login, if true the first local screen will automatically logged This is an inserted line # in as user as set with AutomaticLogin key. AutomaticLoginEnable=false AutomaticLogin= # Timed login, useful for kiosks. Log in a certain user after a certain # amount of time TimedLoginEnable=false TimedLogin= TimedLoginDelay=30 # A comma separated list of users that will be logged in without having # is ignored and will always have to authenticate. LocalNoPasswordUsers= # to authenticate on local screens (not over xdmcp). Note that 'root' # If you are having trouble with using a single server for a long time and # want gdm to kill/restart the server, turn this on AlwaysRestartServer=false # The gdm configuration program that is run from the login screen, you should # probably leave this alone GnomeDefaultSession=/usr/share/gnome/default.session # The chooser program. Must output the chosen host on stdout, probably you # should leave this alone Chooser=/usr/bin/gdmchooser # Default path to set. The profile scripts will likely override this DefaultPath=/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/local/bin:/usr/bin # Default path for root. The profile scripts will likely override this RootPath=/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/local/bin:/usr/bin DisplayInitDir=/etc/X11/gdm/Init # get the new graphical greeter. Greeter=/usr/bin/gdmgreeter This is a replaced line # Greeter for xdmcp logins, usually you want a less graphically intensive # greeter here so it's better to leave this with gdmlogin RemoteGreeter=/usr/bin/gdmlogin # User and group that gdm should run as. Probably should be gdm and gdm and # you should create these user and group. Anyone found running this as This is a replaced line # access to only the gdm directories and files. User=gdm Group=gdm # To try to kill all clients started at greeter time or in the Init script. # doesn't always work, only if those clients have a window of their own KillInitClients=true # You should probably never change this value unless you have a weird setup LogDir=/var/lib/gdm PidFile=/var/run/gdm.pid PostSessionScriptDir=/etc/X11/gdm/PostSession/ PreSessionScriptDir=/etc/X11/gdm/PreSession/ # Distributions: If you have some script that runs an X server in say This is an inserted line # VGA mode, allowing a login, could you please send it to me? # if X keeps crashing on us we run this script. The default one does a bunch # of cool stuff to figure out what to tell the user and such and can # run an X configuration program. XKeepsCrashing=/etc/X11/gdm/XKeepsCrashing # Reboot, Halt and suspend commands, you can add different commands RebootCommand=/sbin/shutdown -r now;/usr/sbin/shutdown -r now # separated by a semicolon and gdm will use the first one it can find HaltCommand=/usr/bin/poweroff;/sbin/poweroff;/sbin/shutdown -h now;/usr/sbin/shutdown -h now SuspendCommand= ServAuthDir=/var/lib/gdm SessionDir=/etc/X11/gdm/Sessions/ # Better leave this blank and HOME will be used. You can use syntax ~/ below # to indicate home directory of the user UserAuthDir= UserAuthFBDir=/tmp # Fallback if home directory not writable # The X server to use if we can't figure out what else to run. This is a replaced line StandardXServer=/usr/X11R6/bin/X0 # The maximum number of flexible X servers to run. FlexibleXServers=5 Xnest=/usr/X11R6/bin/Xnest -name Xnest # Automatic VT allocation. Right now only works on Linux. This way # the X nest command # we force X to use specific vts. turn VTAllocation to false if this This is an inserted line # is causing problems. FirstVT=7 VTAllocation=false [security] # If any distributions ship with this one off, they should be shot This is an inserted line # this is only local, so it's only for say kiosk use, when you # want to minimize possibility of breakin AllowRoot=true # If you want to be paranoid, turn this one off AllowRemoteRoot=true # This will allow remote timed login AllowRemoteAutoLogin=false # 0 is the most anal, 1 allows group write permissions, 2 allows all write permissions RelaxPermissions=0 RetryDelay=3 # Maximum size of a file we wish to read. This makes it hard for a user to DoS us # by using a large file. UserMaxFile=65536 # Maximum size of the session file. This is larger because it matters less as we # never keep it all in memory. Just has an upper limit so that we don't go into too # long of a loop SessionMaxFile=524388 # gdm remotely (I'd never turn this on on open network, use ssh for such # XDMCP is the protocol that allows remote login. If you want to log into This is an inserted line # remote usage that). You can then run X with -query to log in, # type at the bottom of this config file. [xdmcp] # Distributions: Ship with this off. It is never a safe thing to leave # out on the net. Alternatively you can set up /etc/hosts.allow and # /etc/hosts.deny to only allow say local access. # Honour indirect queries, we run a chooser for these, and then redirect Enable=false This is an inserted line # the user to the chosen host. Otherwise we just log the user in locally. HonorIndirect=true # Maximum pending requests MaxPendingIndirect=4 MaxPending=4 # Maximum open XDMCP sessions at any point in time # Maximum wait times MaxSessions=16 MaxWait=15 MaxWaitIndirect=15 # How many times can a person log in from a single host. Usually better to # keep at 1 to fend off DoS attacks by running many logins from a single # host # The port. 177 is the standard port so better keep it that way DisplaysPerHost=1 Port=177 # Willing script, none is shipped and by default we'll send # hostname system id. But if you supply something here, the This is a replaced line This is a replaced line This is a replaced line [gui] # The 'theme'. By default we're using the default gtk theme This is an inserted line # Of course assuming that gtk got installed in the same prefix, # if not change this. GtkRC=/usr/share/themes/Default/gtk/gtkrc # Maximum size of an icon, larger icons are scaled down MaxIconHeight=128 This is a replaced line This is a replaced line [greeter] # Greeter has a nice title bar that the user can move TitleBar=true # Configuration is available from the system menu of the greeter # Face browser is enabled. This only works currently for the ConfigAvailable=true # standard greeter as it is not yet enabled in the graphical greeter. Browser=true DefaultFace=/usr/share/mdk/faces/default.png # These are things excluded from the face browser, not from logging in # The default picture in the browser Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,gdm,postgres,pvm,rpm This is a replaced line This is a replaced line # If user or user.png exists in this dir it will be used as his picture GlobalFaceDir=/usr/share/faces/ # Icon we use # File which contains the locale we show to the user. Likely you want to use # the one shipped with gdm and edit it. It is not a standard locale.alias file, # although gdm will be able to read a standard locale.alias file as well. LocaleFile=/etc/X11/gdm/locale.alias This is an inserted line # Logo shown in the standard greeter Logo=/usr/share/pixmaps/gdm-screen.png # The standard greeter should shake if a user entered the wrong username or Quiver=true # password. Kind of cool looking # The system menu is shown in the greeter SystemMenu=true # Note to distributors, if you wish to have a different Welcome string # and wish to have this translated you can have entries such as # Welcome[cs]=Vitejte na %n # Just make sure the string is in utf-8 Welcome=Welcome to %n # if TitleBar is on LockPosition=false # Don't allow user to move the standard greeter window. Only makes sense # Set a position rather then just centering the window. If you enter # negative values for the position it is taken as an offset from the # right or bottom edge. This is a replaced line This is a replaced line PositionY=0 # Xinerama screen we use to display the greeter on. Not for true XineramaScreen=0 # multihead, currently only works for Xinerama. # Background settings for the standard greeter: # Type can be 0=None, 1=Image, 2=Color BackgroundType=2 BackgroundImage= BackgroundScaleToFit=true BackgroundColor=#21449c # XDMCP session should only get a color, this is the sanest setting since # you don't want to take up too much bandwidth BackgroundRemoteOnlyColor=true # Program to run to draw the background in the standard greeter. Perhaps BackgroundProgram= # something like an xscreensaver hack or some such. This is a replaced line # it is only run when the BackgroundType is 0 (None) RunBackgroundProgramAlways=false # Show the chooser (you can choose a specific saved gnome session) session ShowGnomeChooserSession=false # Show the Failsafe sessions. These are much MUCH nicer (focus for xterm for # use this rather then just running an xterm from a script. ShowGnomeFailsafeSession=false ShowXtermFailsafeSession=false # Always use 24 hour clock no matter what the locale. Use24Clock=false # Use circles in the password field. Looks kind of cool actually # These two keys are for the new greeter. Circles is the standard # shipped theme GraphicalTheme=mdk GraphicalThemeDir=/usr/share/gdm/themes/ # The chooser is what's displayed when a user wants an indirect XDMCP This is an inserted line # session [chooser] # Default image for hosts DefaultHostImg=/usr/share/pixmaps/nohost.png # Directory with host images, they are named by the hosts: host or host.png HostImageDir=/usr/share/hosts/ # Time we scan for hosts (well only the time we tell the user we are # scanning actually) ScanTime=3 This is an inserted line This is an inserted line This is an inserted line # A comma separated lists of hosts to automatically add (if they answer to This is a replaced line # reach. # Broadcast a query to get all hosts on the current network that answer Hosts= Broadcast=true [debug] # This will enable debugging into the syslog, usually not neccessary This is an inserted line # and it creates a LOT of spew of random stuff to the syslog. However it # can be useful in determining when something is going very wrong. Enable=false [servers] # These are the standard servers. You can add as many you want here # and they will always be started. Each line must start with a unique # number and that will be the display number of that server. Usually just 0=Standard 1=2nd # the 0 server is used. # Note the VTAllocation and FirstVT keys on Linux. Don't add any vt This is an inserted line # arguments if VTAllocation is on, and set FirstVT to be the first vt # even a vt that has already been taken). Using 7 will work pretty much for # all Linux distributions. VTAllocation is not currently implemented on # send patches. X servers will just not get any extra arguments then. # #Note: If you want to run an X terminal you could add an X server such as this # or for a chooser (optionally serverhostname could be localhost) #0=Terminal -query serverhostname #0=Terminal -indirect serverhostname # Definition of the standard X server. [server-Standard] name=Standard server command=/usr/X11R6/bin/X0 :0 -deferglyphs 16 vt7 flexible=true # Definition of the second X server. This is an inserted line [server-2nd] name=2nd server command=/usr/X11R6/bin/X1 :1 -xf86config /etc/X11/XF86Config-4.X1 -deferglyphs 16 vt17 This is an inserted line flexible=true # To use this server type you should add -query host or -indirect host # to the command line This is a replaced line name=Terminal server # Add -terminate to make things behave more nicely command=/usr/X11R6/bin/X -terminate # Make this not appear in the flexible servers (we need extra params flexible=false # Not local, we do not handle the logins for this X server This is a replaced line ----------------------------------------------------------------------------- This is a replaced line B.3. Configuration files for Input Agent B.3.1. Keyboard configuration /etc/hotplug/kbd.conf # # keyboard configuretion # vt_name device_physicaly_location VT1 isa0060/serio0/input0 VT0 usb-00:10.1-1.1/input0 #VT2 usb-*.*-1/input0 ----------------------------------------------------------------------------- B.3.2. Mouse configuration # mouse device configuration # This is an inserted line # sym_link device_physicaly_location mouse0br usb-00:10.1-1.2/input0 mouse2br usb-00:10.1-2.7.*/input0 ----------------------------------------------------------------------------- mouse1br usb-00:10.1-2.2/input0 B.3.3. Event device configuration # /etc/hotplug/event.conf This is an inserted line # input event device config file # # symbolic_link device_physicaly_location #event0br isa0060/serio0/* #event0br isa0060/serio1/input0 ----------------------------------------------------------------------------- Appendix C. Scripts C.1. hotplug: input.agent /etc/hotplug/input.agent #!/bin/sh # Please place this file /etc/hotplug # # input-specific hotplug policy agent. # This is an inserted line # Kernel Input params are: # # ACTION=add # PHYS=pysical location of device # NAME=Name of the device # # HISTORY: # 15-JUN-2003 removed paste # 07-MAY-2003 remake by Aivils Stoss # /proc manipulation added # parse kbd.conf event.conf mouse.conf. # create necessary symbolic links # 28-SEP-2002 Initial version from Andreas Schuldei # andreas (at) schuldei.org # cd /etc/hotplug . hotplug.functions DEBUG=yes export DEBUG This is an inserted line KBD_CONFIG="./kbd.conf" EVENT_CONFIG="./event.conf" This is a replaced line This is a replaced line { while read VT_NUM PHYS_PATTERN NAME_PATTERN if [ `echo "$VT_NUM" | grep "^#"` ]; then This is a replaced line fi if [ `echo "$PHYS" | grep $PHYS_PATTERN 2>/dev/null` ]; then VT=`echo "$VT_NUM" | sed 's/VT//' | awk '{printf "%02d", $0}'` echo "$PHYS" > "/proc/bus/console/$VT/keyboard" if [ -d /proc/bus/console/$VT ]; then debug_mesg "Input device $NAME on $PHYS mapping as secondary to VT$VT" return; else debug_mesg "Trying to configure keyboard for VT$VT , but not enough VT's available" fi done debug_mesg "Found no fitting VT" } setup_event () { do while read SYM_LINK PHYS_PATTERN NAME_PATTERN continue; if [ `echo "$SYM_LINK" | grep "^#"` ]; then fi if [ `echo "$PHYS" | grep $PHYS_PATTERN 2>/dev/null` ]; then case $ACTION in add) cd /dev/input This is a replaced line ln -s $DEV_EVENT $SYM_LINK debug_mesg "Input event device $NAME on $PHYS linked to $SYM_LINK" ;; remove) rm -f /dev/input/$SYM_LINK ;; esac debug_mesg "Input event device link $SYM_LINK removed" return; fi This is an inserted line done debug_mesg "Found no fitting event device" } setup_mouse () while read SYM_LINK PHYS_PATTERN NAME_PATTERN do if [ `echo "$SYM_LINK" | grep "^#"` ]; then fi if [ `echo "$PHYS" | grep $PHYS_PATTERN 2>/dev/null` ]; then add) cd /dev/input rm -f $SYM_LINK This is a replaced line debug_mesg "Input mouse device $NAME on $PHYS linked to $SYM_LINK" ;; remove) rm -f /dev/input/$SYM_LINK debug_mesg "Input mouse device link $SYM_LINK removed" ;; esac return; fi done debug_mesg "Found no fitting mouse device" } if [ "$ACTION" = "" ]; then mesg Bad input agent invocation exit 1 fi DEV_HANDLERS=`grep -E 'Phys|Handlers' /proc/bus/input/devices | \ awk '{ if(count == 0) { printf("%s\t",$0); count++; } else { print $0; count=0; } }' | \ grep $PHYS | awk -F\t '{print $2}' | sed 's/^.*=//'` # older grep do not support -o :-( #DEV_EVENT=`echo $MATCHED | grep -oE event[0-9]+` #DEV_MOUSE=`echo $MATCHED | grep -oE mouse[0-9]+` #DEV_KBD=`echo $MATCHED | grep -o kbd` DEV_EVENT=`echo $DEV_HANDLERS | \ awk -F" " '{for(n=1;$n;n=n+1) if($n ~ /event/) print $n}'` DEV_MOUSE=`echo $DEV_HANDLERS | \ awk -F" " '{for(n=1;$n;n=n+1) if($n ~ /mouse/) print $n}'` DEV_KBD=`echo $DEV_HANDLERS | \ # # What to do with this input device event? case "$ACTION" in add) if [ -n "$DEV_KBD" ]; then setup_kbd < $KBD_CONFIG This is an inserted line if [ -n "$DEV_EVENT" ]; then This is a replaced line setup_event < $EVENT_CONFIG fi if [ -n "$DEV_MOUSE" ]; then fi remove) #setup_event < $EVENT_CONFIG ;; ;; This is an inserted line #setup_mouse < $MOUSE_CONFIG *) return 1 ;; esac ----------------------------------------------------------------------------- C.2. hotplug: input.rc #!/bin/bash /etc/hotplug/input.rc This is an inserted line # # input.rc This loads handlers for those input devices # # Best invoked via /etc/init.d/hotplug or equivalent, with # writable /tmp, /usr mounted, and syslogging active. # PATH=/sbin:/bin:/usr/sbin:/usr/bin PROCDIR=/proc/bus/input # source function library if [ -f /etc/init.d/functions ]; then . /etc/init.d/functions . /etc/rc.d/init.d/functions elif [ -f /etc/rc.d/init.d/functions ]; then fi if [ -f /etc/hotplug/hotplug.functions ]; then . /etc/hotplug/hotplug.functions This is a replaced line input_reset_state () { PRODUCT= NAME= PHYS= This is an inserted line EV= KEY= REL= ABS= MSC= This is an inserted line LED= SND= FF= This is an inserted line } # # before the OS could really handle hotplug, perhaps because /sbin or # "COLD PLUG" ... load input handlers for compile-in input drivers loaded # $HOTPLUG_DIR wasn't available or /tmp wasn't writable. When/if the This is an inserted line This is an inserted line This is an inserted line # /sbin/hotplug program is invoked then, hotplug event notifications # all the hotplug events we expect to have seen already. They can be # get dropped. To make up for such "cold boot" errors, we synthesize # # out of order, and some might be duplicates. input_boot_events () { if [ ! -r $PROCDIR/devices ]; then return fi ACTION=add export PRODUCT NAME PHYS EV KEY REL ABS MSC LED SND FF input_reset_state This is a replaced line declare line # # the following reads from /proc/bus/input/devices. It is inherently # racy (esp. as this file may be changed by input.agent invocation) # # but so far input devices do not appear in sysfs while read line; do I:* ) # product ID eval "${line#I: }" This is an inserted line PRODUCT=$Bus/$Vendor/$Product/$Version ;; N:* ) # name NAME="$Name" ;; This is a replaced line P:* ) # Physical eval "${line#P: }" PHYS=$Phys ;; B:* ) # Controls supported line="${line#B: }" eval "${line%%=*}=\"${line#*=}\"" ;; "" ) # End of block debug_mesg "Invoking input.agent" debug_mesg "PRODUCT=$PRODUCT" debug_mesg "NAME=$NAME" debug_mesg "PHYS=$PHYS" This is a replaced line This is an inserted line debug_mesg "KEY=$KEY" debug_mesg "REL=$REL" debug_mesg "ABS=$ABS" debug_mesg "MSC=$MSC" This is a replaced line debug_mesg "SND=$SND" debug_mesg "FF=$FF" /etc/hotplug/input.agent < /dev/null This is a replaced line This is an inserted line ;; done < $PROCDIR/devices esac } case "$1" in start) This is a replaced line ;; stop) : not supported currently This is a replaced line status) echo $"INPUT status for kernel: " `uname -srm` echo '' This is an inserted line if [ -r $PROCDIR/devices ]; then grep "^[INHP]:" $PROCDIR/devices else echo "$PROCDIR/devices not available" fi echo '' This is a replaced line cat $PROCDIR/handlers else echo "$PROCDIR/handlers not available" This is an inserted line fi echo '' ;; restart) # always invoke by absolute path, else PATH=$PATH: This is an inserted line This is an inserted line $0 stop && $0 start ;; echo $"Usage: $0 {start|stop|status|restart}" This is an inserted line exit 1 esac ----------------------------------------------------------------------------- C.3. hotplug & XFree supporting event devices: input.agent This is an inserted line /etc/hotplug/input.agent This is a replaced line This is an inserted line cd /etc/hotplug #DEBUG=yes export DEBUG export ARG_SEP='\002' export VAL_SEP='\003' for dev in `ls /tmp/.X11-unix/ | grep evdev`; do { export dev="/tmp/.X11-unix/${dev}" This is a replaced line }; done ----------------------------------------------------------------------------- C.4. Wrapper for starting X using Nvidia libGL.so #!/bin/bash ######################################################### ### /usr/X11R6/bin/XNV ### ### script to start XFree with different LIBRARY_PATH ### This is a replaced line This is an inserted line ######################################################### export LD_LIBRARY_PATH=/usr/X11R6/libNV This is a replaced line ----------------------------------------------------------------------------- C.5. For installing Nvidia drivers for parallel use with DRI ### /usr/sbin/ruby_NVinstaller ### ######################################################## ### for usage call it with -h or --help parameter ### ######################################################## This is an inserted line if [[ -z $1 ]] || [ "$1" == "-h" ] || [ "$1" == "--help" ] ;then echo "Usage :" This is a replaced line echo "eg. $0 /root/NVIDIA-Linux-x86-1.0-4349.run" echo "$0 full path to Nvidia installer" fi exit 1 echo This is an inserted line if [[ -z $OPENWINHOME ]];then echo "Please set the environment variable OPENWINHOME" echo "pointing to your XFree prefix eg. /usr/X11R6" echo "OPENWINHOME not defined!!!" echo "export OPENWINHOME=/usr/X11R6" exit 1 fi cd $OPENWINHOME echo echo "backup file for XFree's GL libraries " echo "is $OPENWINHOME/libGL-backup.tar" This is a replaced line echo "old backup exist, deleting" && rm libGL-backup.tar echo find lib -name "libGL.*" -o -name "libGLcore*" \ fi -o -name "libglx.*" | xargs tar rpf libGL-backup.tar \ && echo "backup finished" echo echo "now running Nvidia installer" echo `which $1` --no-opengl-headers --xfree86-prefix=/usr/X11R6NV --opengl-prefix=/usr/X11R6NV This is an inserted line RETVAL=$? if [ $RETVAL -eq 0 ]; then This is a replaced line echo "Nvidia installer finished," echo "now coping files to /usr/X11R6/libNV/" echo cd /usr/X11R6NV/lib && tar c * | tar xvC /usr/X11R6/libNV/ echo echo echo "restoring backuped GL libraries" tar xvfp libGL-backup.tar && ldconfig && echo "GL libraries restored" && rm libGL-backup.tar fi if [ $RETVAL -ne 0 ]; then echo echo "installer aborted, not restoring backup" This is a replaced line fi echo echo "script finished" ----------------------------------------------------------------------------- Appendix D. Experimental Backstreet Ruby configuration Script/ Service This is an inserted line D.1. README.ruby_init explains how to configure and use the service. well, have to be written :-) You'll need to install the following scripts : (and don't forget to make them executable :-) with chmod a+x [filename] ) /etc/hotplug/input.rc /etc/hotplug/input.agent /etc/init.d/ruby_init and the configuration file: This is an inserted line /etc/sysconfig/ruby.conf edit the configuration file to adjust it to your system configuration start the service and check if everything is done as requested and configured if everything is OK activate the service by running "chkconfig --add ruby_init" . root@svetljo SRPMS]# chkconfig --list ruby_init ruby_init 0:off 1:off 2:on 3:on 4:on 5:on 6:off you can deactivate it by running "chkconfig --del ruby_init" The input configuration uses the same syntax as kbd.conf, mouse.conf, event.conf as explained The other configurable options are: This is a replaced line HACK_VIDEO_ENABLE=no If set to "yes", turns on at boot the hackvideo feature of the Backstreet Ruby kernel. This is an inserted line In case XFree PrefBusID is used set to "no" HOTPLUG_RC_input=yes If set to "yes", runs /etc/hotplug/input.rc to configure input devices which were activated This is an inserted line This is a replaced line Generaly needed by all systems unless you have all input drivers configured as loadable modules and load the drivers after hotplug is accessible to the kernel. AUTO_DM=no AUTO_XFree=no enables/disables the features explained in sections This is a replaced line you don't need to modify your init scripts if you use the ruby_init service and enable them "7.3. 1st X server configuration file" and "7.4. Number X servers started by Display managers" in ruby.conf. LOAD_MODULES=yes This is an inserted line if set to "yes" loads certain input device drivers in case a ruby kernel is running. # # input modules configuration # # module arguments The list of modules which should be loaded in case ruby kernel is running and LOAD_MODULES is set to "yes". In the example file are listed all important input drivers (keyboards & mice). This is an inserted line If you have some of them compiled in the kernel, you may disable the loading This is a replaced line the ext-status argument can give you detailed information about the current configuration, and valuable information in case you are in trouble. ----------------------------------------------------------------------------- D.2. The global configuration file /etc/sysconfig/ruby.conf This is a replaced line Input subsystem of a Backstreet ruby kernel and wether certain actions/ services should be run when such kernel is used. # /etc/sysconfig/ruby.conf # This file contains defaults for bruby_init # # HACK_VIDEO_ENABLE controls wether the ruby kernel shoukd # ignore certain XFree commands. # # Set to yes in case you are not running the XFree-PrefBusID # but XFree from your distribution # This is a replaced line # HOTPLUG_RC_input controls whether the input subsystem is started by This is a replaced line # HOTPLUG_RC_input=yes This is a replaced line # AUTO_DM controls wether the display manager configuration files # is adjusted upon the boot argument dumbcon=[number] # # AUTO_XFree controls wether the XFree configuration file is # adjusted upon XFree=[string] argument. # and can not be disabled. # AUTO_DM=no AUTO_XFree=no # # LOAD_MODULES controls wether the additional modules listed below # should be loaded when a ruby kernel is running. This is a replaced line LOAD_MODULES=yes # # # module arguments mousedev # needed for all mice # for USB input hid # for PS2 input serio atkbd i8042 psmouse # keyboard devices configuration # # # vt_name device_physicaly_location VT0 isa0060/serio0/input0 VT1 usb-00:10.1-1.1/input0 #VT0 isa0060/serio0/input0 #VT2 usb-*.*-1/input0 # # multimedia keys configuration # # vt_name device_physicaly_location #VT1 usb-00:10.1-1.1/input1 # mouse devices configuration # # # sym_link device_physicaly_location mouse0br isa0060/serio1/input0 mouse1br usb-00:10.1-1.2/input0 #mouse1br usb-00:10.1-2.2/input0 #mouse2br usb-00:10.1-2.7.*/input0 # # event devices configuration # #event0br isa0060/serio1/input0 #event1br usb-00:10.1-1.1/input0 #event3br usb-00:10.1-1.2/input0 # # end input device configuration # ----------------------------------------------------------------------------- D.3. The ruby_init service /etc/init.d/ruby_init specific to a Backstreet Ruby system. The /etc/init.d/ruby_init service configures/ activates most of the settings #!/bin/sh # # loads additional input modules, manages the XFree \ # ruby_init This scripts configures cold-pluging for bruby, \ This is a replaced line This is an inserted line # description: Configures the Bruby input subsystem and manages \ # XFree and display manager configuration files. # chkconfig: 2345 02 98 # config: /etc/sysconfig/ruby.conf # TODO # # * handle commented out "PciOsConfig" # *? status/ ext-status # - check wether curr. configuration matches setup ? # - show config # - make it work when hotplug files not installed ? # ( currently it will just just inform that they are not installed # and exit ) # $Id: XFree-Local-multi-user-HOWTO.xml,v 1.12 2003/11/11 14:52:42 gferg Exp $ # # - don't exit silently if hackvideo or modules loading is deactivated, # run the script to the end # $Id: XFree-Local-multi-user-HOWTO.xml,v 1.12 2003/11/11 14:52:42 gferg Exp $ # - show keyboard status per VT ,use sed instead of head(head is in /usr) # - *? status/ ext-status # - (mice & evdev links)? # $Id: XFree-Local-multi-user-HOWTO.xml,v 1.12 2003/11/11 14:52:42 gferg Exp $ # - include hackvideo handling (long time wondering what was missing) # $Id: XFree-Local-multi-user-HOWTO.xml,v 1.12 2003/11/11 14:52:42 gferg Exp $ # - got it actually running # (what a mess) # - use >& /dev/null to load variables from the config file # $Id: XFree-Local-multi-user-HOWTO.xml,v 1.12 2003/11/11 14:52:42 gferg Exp $ # - initial release PATH=/sbin:/bin:/usr/sbin:/usr/bin This is a replaced line if [ -f /etc/init.d/functions ]; then . /etc/init.d/functions This is a replaced line . /etc/rc.d/init.d/functions fi This is an inserted line # source defaults if [ -f /etc/sysconfig/ruby.conf ]; then #WTF, how to get rid of the ".... >& /dev/null" RUBY_CONF="/etc/sysconfig/ruby.conf" . /etc/sysconfig/ruby.conf >& /dev/null else This is an inserted line action "ruby_init: Configuration file missing" /bin/false exit 1 fi function get_status() { # prefbus_used ? run_hackvideo status This is an inserted line # print dumb_con=? get_kbds #and curr. active VTs This is an inserted line } function get_ext_status() { This is a replaced line run_hackvideo status # prefbus_used ? # print dumb_con=? get_links mouse get_kbds #and curr. active VTs get_links event } function run_start_restart() { This is an inserted line load_modules run_hackvideo start run_input_rc start run_auto_dm run_auto_xfree } for RC in /etc/hotplug/input.rc do function run_input_rc () { This is a replaced line This is an inserted line continue fi $RC $1 if [ "$1" != status ]; then action "bruby: configuring cold-pluged devices." $RC $1 done fi } function run_hackvideo () { eval "doit=\"\$HACK_VIDEO_ENABLE\"" if [ "$doit" != yes ]; then This is a replaced line echo "XFree hackvideo not configured." fi return ; fi if [ -f /etc/X11/XF86Config-4 ]; then if [ -f /proc/bus/pci/hackvideo ]; then xf_file="/etc/X11/XF86Config-4" elif [ -f /etc/X11/XF86Config ]; then xf_file="/etc/X11/XF86Config" else This is an inserted line action "bruby: XFree configuration file not found" /bin/false exit 1 This is a replaced line This is an inserted line #fi This is a replaced line case "$1" in This is a replaced line action "bruby: Enabling XFree hackvideo workaound." /bin/true /bin/echo "1" > /proc/bus/pci/hackvideo ;; This is an inserted line stop) action "bruby: Disabling XFree hackvideo workaound." /bin/echo "0" > /proc/bus/pci/hackvideo ;; status) This is an inserted line eval "hack_enabled=`cat /proc/bus/pci/hackvideo`" echo "XFree hackvideo activated" else echo "XFree hackvideo not activated," echo "but enabled in configuration. " fi *) ;; esac else action "bruby: Hackvideo not configured in XFree," /bin/false action "bruby: but enabled in $RUBY_CONF." /bin/false fi else action "bruby: XFree hackvideo configured," /bin/false action "bruby: but kernel hackvideo support missing." /bin/false fi } function load_modules () { eval "doit=\"\$LOAD_MODULES\"" This is a replaced line return ; fi action "bruby: loading additional modules." /bin/true This is an inserted line cat $RUBY_CONF | sed -n "/input modules /,/config/p" | while read module args do case "$module" in \#*|"") continue ;; initlog -s "Loading module: $module" modprobe $module $args >/dev/null 2>&1 done } eval "doit=\"\$AUTO_XFree\"" return ; if [ "$doit" != yes -a "$1" != status ]; then fi # (pixel) a kind of profile for XF86Config # if no XFree=XXX given on kernel command-line, restore XF86Config.standard for i in XF86Config XF86Config-4; do if [ -L "/etc/X11/$i" ]; then This is an inserted line XFree=`sed -n 's/.*XFree=\(\w*\).*/\1/p' /proc/cmdline` This is an inserted line [ -n "$XFree" ] || XFree=standard [ -r "/etc/X11/$i.$XFree" ] && ln -sf "$i.$XFree" "/etc/X11/$i" fi done } function run_auto_dm () { eval "doit=\"\$AUTO_DM\"" if [ "$doit" != yes -a "$1" != status ]; then return ; # fi #the same like XF86Config but for gdm.conf & Xservers # for i in xdm/Xservers gdm/gdm.conf; do if [ -L "/etc/X11/$i" ]; then DumbCon=`sed -n 's/.*dumbcon=\([0-9]*\).*/\1/p' /proc/cmdline` [ -n "$DumbCon" ] || DumbCon=0 This is an inserted line [ -r "/etc/X11/$i.$DumbCon" ] && ln -sf "/etc/X11/$i.$DumbCon" "/etc/X11/$i" This is a replaced line action "bruby: configuring display manager." /bin/true done } echo "Setting up display managers for `expr $DumbCon + 1` Xservers" function get_kbds() { This is an inserted line This is an inserted line j=0 do for i in /proc/bus/console/* j=`expr $j + 1` phys=`cat $i/keyboard` if [ "$phys" = "" ];then echo " VT-`basename $i` : keyboard not attached" else # grep -n2 "$phys" /proc/bus/input/devices | sed -e '{/^B: /s;^B:.*;;};{s;^.*: ;;};' -e "/EV=/d" grep -B2 -A1 "$phys" /proc/bus/input/devices | sed 's;^.*: ;;' fi done echo } echo "Total of $j VT's avialable." function get_links() { echo for i in /dev/input/$1*br do real=`ls -l $i 2>/dev/null | sed "{s;^.*/dev/input/;;};{s; ->;;}" | cut -d " " -f 2` if [ "$real" != "" ]; then echo "$i" else sed -e '/Name/,/Handl/s/.*: //;{/^B: /s;^B:.*;;};' /proc/bus/input/devices | grep -B2 -A1 "$real" exit 0 fi done } if [ -f /proc/bus/console -o -n tmp=`uname -r | sed -n 's:ruby::p'` ]; then if [ -x /etc/hotplug/input.rc -a -f /etc/hotplug/input.agent ]; then case "$1" in run_start_restart ;; start|restart) get_status status) touch /var/lock/subsys/ruby ext-status) ;; touch /var/lock/subsys/ruby get_ext_status ;; #run_hackvideo stop run_input_rc stop rm -f /var/lock/subsys/ruby This is an inserted line ;; force-reload) run_input_rc stop run_input_rc start touch /var/lock/subsys/ruby ;; *) gprintf "Usage: %s {start|stop|restart|status|ext-status|force_reload}\n" "$0" exit 3 ;; esac else if [ -f /etc/hotplug/input.rc -a -f /etc/hotplug/input.agent ]; then action "Input: Please check the file permissions." /bin/false action "Input: input.rc and input.agent installed, but not executable." /bin/false else action "Input: Failed to configure cold plugged devices." /bin/false fi action "Input: input.rc or input.agent missing." /bin/false fi This is a replaced line ----------------------------------------------------------------------------- D.4. Modified hotplug input.agent /etc/hotplug/input.agent This /etc/hotplug/input.agent is modified to use the global configuration file. #!/bin/sh This is a replaced line # # input-specific hotplug policy agent. # # Kernel Input params are: # # ACTION=add # PHYS=pysical location of device # NAME=Name of the device # # HISTORY: This is a replaced line # (Svetoslav Slavtchev) # added handling for multimedia keys # but doesn't work as expected :( This is an inserted line # 07-MAY-2003 remake by Aivils Stoss # 15-JUN-2003 removed paste # parse kbd.conf event.conf mouse.conf. # create necessary symbolic links # 28-SEP-2002 Initial version from Andreas Schuldei # andreas (at) schuldei.org # cd /etc/hotplug This is an inserted line . hotplug.functions DEBUG=yes export DEBUG RUBY_CONF="/etc/sysconfig/ruby.conf" setup_kbd () { while read VT_NUM PHYS_PATTERN NAME_PATTERN do if [ `echo "$VT_NUM" | grep "^#"` ]; then continue; if [ `echo "$PHYS" | grep $PHYS_PATTERN 2>/dev/null` ]; then fi if [ -d /proc/bus/console/$VT ]; then VT=`echo "$VT_NUM" | sed 's/VT//' | awk '{printf "%02d", $0}'` echo "$PHYS" > "/proc/bus/console/$VT/keyboard" debug_mesg "Input device $NAME on $PHYS mapping as secondary to VT$VT" return; else debug_mesg "Trying to configure keyboard for VT$VT , but not enough VT's available" fi fi done debug_mesg "Found no fitting VT" } setup_mm_keys () { while read VT_NUM PHYS_PATTERN NAME_PATTERN do This is an inserted line if [ `echo "$VT_NUM" | grep "^#"` ]; then continue; fi if [ `echo "$PHYS" | grep $PHYS_PATTERN 2>/dev/null` ]; then This is a replaced line echo "+$PHYS" > "/proc/bus/console/$VT/keyboard" if [ -d /proc/bus/console/$VT ]; then debug_mesg "Input device $NAME on $PHYS mapping as secondary to VT$VT" else debug_mesg "Trying to configure keyboard for VT$VT , but not enough VT's available" fi fi done } setup_event () { do This is a replaced line This is a replaced line fi case $ACTION in add) if [ `echo "$PHYS" | grep $PHYS_PATTERN 2>/dev/null` ]; then rm -f $SYM_LINK cd /dev/input This is a replaced line debug_mesg "Input event device $NAME on $PHYS linked to $SYM_LINK" ;; remove) rm -f /dev/input/$SYM_LINK debug_mesg "Input event device link $SYM_LINK removed" ;; esac return; This is a replaced line debug_mesg "Found no fitting event device" done } setup_mouse () This is an inserted line { This is an inserted line while read SYM_LINK PHYS_PATTERN NAME_PATTERN do if [ `echo "$SYM_LINK" | grep "^#"` ]; then continue; if [ `echo "$PHYS" | grep $PHYS_PATTERN 2>/dev/null` ]; then fi case $ACTION in add) cd /dev/input rm -f $SYM_LINK ln -s $DEV_MOUSE $SYM_LINK debug_mesg "Input mouse device $NAME on $PHYS linked to $SYM_LINK" This is an inserted line ;; remove) rm -f /dev/input/$SYM_LINK This is a replaced line ;; esac return; This is a replaced line done debug_mesg "Found no fitting mouse device" setup_input () { if [ -n "$DEV_KBD" ]; then sed -n "/keyboard devices/,/config/p" $RUBY_CONF | setup_kbd fi if [ -n "$DEV_EVENT" ]; then sed -n "/event devices/,/config/p" $RUBY_CONF | setup_event if [ -n "$DEV_MOUSE" ]; then fi sed -n "/mouse devices/,/config/p" $RUBY_CONF | setup_mouse This is a replaced line if [ "$ACTION" = "" ]; then exit 1 fi This is an inserted line DEV_HANDLERS=`grep -E 'Phys|Handlers' /proc/bus/input/devices | \ awk '{ if(count == 0) { printf("%s\t",$0); count++; } else { print $0; count=0; } }' | \ grep $PHYS | awk -F\t '{print $2}' | sed 's/^.*=//'` DEV_EVENT=`echo $DEV_HANDLERS | \ DEV_MOUSE=`echo $DEV_HANDLERS | \ awk -F" " '{for(n=1;$n;n=n+1) if($n ~ /event/) print $n}'` DEV_KBD=`echo $DEV_HANDLERS | \ awk -F" " '{for(n=1;$n;n=n+1) if($n ~ /kbd/) print $n}'` # # What to do with this input device event? # case "$ACTION" in This is a replaced line ;; This is a replaced line remove) #setup_input This is an inserted line ;; *) This is an inserted line This is an inserted line debug_mesg "Input '$ACTION' event not supported" This is an inserted line return 1 This is an inserted line ;; This is a replaced line esac Notes [1] All the features in Backstreet Ruby are included ( "/proc " interface & for single Framebuffer console which takes over the VGA console (support hot-plugging, video hack, ...), support for Framebuffer devices, support for multiple independent Framebuffer consoles is not yet implemented)