QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6488|回复: 31

Linux下支持多个XFree本地用户的显示!

[复制链接]
发表于 2004-7-26 17:17:32 | 显示全部楼层 |阅读模式
今天是PXE2姐姐的生日,仅以此篇文章献给姐姐,祝她生日快乐,天天开心!我和爸爸妈妈都很想你,希望你常回家看看!
先看看这张照片吧作者和他女友共用一台电脑的情景,真是好浪漫哦!为了女友研究一项技术,好感动哦!
http://cambuca.ldhs.cetuc.puc-rio.br/multiuser/quarto.jpg

Linux下支持多个XFree本地用户
版本0.97.1
作者 Miguel Freitas <[email protected]>
更新于Jun 9, 2004

你总是可以从下面的链接获得本文章的最新版本:http://cambuca.ldhs.cetuc.puc-rio.br/multiuser
关键字
我浪费了很多时间试图在google,hotbot等搜索网站上寻找关于这方面的文章。让我添加一些关键字来帮助你找到这些文章:true dual-head(真正的双头) ,multi-user support(多用户支持),XFree86 4.0,multiple keyboard(多键盘),multiple mouse(多鼠标), multiple video card(多显卡), dual user(多用户), XFree86 instances(XFree86实例), dual keyboard(双键盘), USB keyboard under X(X下的USB键盘)。
研究的动力
   我有一个女朋友和一台电脑。正常情况下,尽管电脑通常都有很强的可使用的处理能力,我和我的女友还是不能同时共用这台电脑。我还有一个空闲的显示器和第二块显卡,这第二块显卡是用来玩3D游戏的(voodoo)。所以我产生这个解决问题的办法就很自然而然了。新的XFree86 4.0支持双头,这表明大部分的艰苦工作已经完成了。我的这个实现必须是在linux下,因为其他不开放源码的操作系统不允许我作必须的改动。
正像一些报道所证实的,由于linux的巨大的优点和低成本,它已经被成功地应用于教育机构和工程中。两个或更多的
学生、工人等同时使用一台电脑,就可以进一步地降低成本。
对于公司来说,这也是一个简化管理和简化共享资源升级(例如主板,处理器,hds)的一个非常好的选择。
有些人可能要问了:电脑会不会变得太慢了?不会的。因为大多数的时间电脑都在等待用户的命令,所以用户是很难感觉出性能上的差异的。如何你自己还没有理解这个问题的话,那么让我来告诉你:我们生活在一个计算能力过剩的时代,你认为大多数人有必要用一台千兆赫的奔腾3的机器而只是用它进行文字处理或仅仅是上网吗?
问题
为了支持多XFree实例(和用户),有些问题需要说明一下:
●VT (Virtual Terminal)的解决-linux内核的虚拟终端模式如今看来已经比较落后了。过去作为可以支持多个显示的一种解决方式,虚拟终端模式还是比较好的,但是现在看来需要完全重写它了(一些linux开发者已经表现出为2.5.x 系列开发一个更好的模式的兴趣)。关键的问题是VT的源码并不知道我们可能有多个输入和输出设备,而这些设备可能是完全独立的。现在也没有方法使对应于各个硬件的一系列指定的虚拟终端联系起来,以使得linux的内核知道哪些虚拟终端可以被同时使用。如果我们分配XFree86的多个实例,他们将在不同的虚拟终端上显示,并且linux内核会通知它们所有虚拟终端的开关。一个关闭的(图形)虚拟终端不可能使用硬件,因为正常情况下它会干涉其他设备的虚拟终端,但是如果我们有两个独立的显卡的话,上面的说法就不再成立了。
●        键盘的支持-在X上支持多鼠标已经成为现实,因为我们可以为每个鼠标指定“设备”的选项。不幸的是,键盘的驱动仍然深深地根植于XFree86的核心中,它不是一个单独的模块,而且是通过读扫描码来实现控制台的输入和输出的功能的。每个XFree86的实例都有它们自己的键盘的访问,访问由虚拟终端的开关来控制。而且,linux现在仍然缺乏一个很好定义的支持多键盘的方式。让我们等待2.5.x系列的出现,看看会有哪些新的改进。。。。

我的解决方案
我的修改肯定不是最好的,我知道在XFree86中许许多多的东西可以有更好的实现并且linux内核可以完全地支持真正的双头(和双输入)。但是这种方式对于我来说很管用。如果你花钱并且浪费精力去买显卡,显示器,键盘,鼠标,结果却无法工作,请不要来指责我,因为我已经警告过你了。
尽管我希望看到XFree86支持键盘的同时使用(没有另外一个实例)和一个全新的键盘的驱动,但是我对这个项目的理解程度不足以单单凭借我自己的能力来实现它。不管怎样,XFree86的开发者做出了如此了不起的软件,我向他们致敬。
我的想法是让XFree86有两个实例。第一个实例将使用一个标准的XFree86服务器,它将初始化主显卡并且将它关联到一个虚拟终端上。它也将使用一个标准的系统AT键盘和鼠标之类的东西(PS/2,串口的,USB仿真PS/2的,任何你想要的东西)。
第二个XFree的实例将是我修改的X server.它根本就不支持虚拟终端的开关。因为它所控制的硬件正常情况下是不会被其他的虚拟终端使用的。请注意我的话,这很重要:显卡不能是最初的那一块,鼠标不能是和被gpm使用的相同的那个并且键盘必须是USB的,而且一定不能向标准的linux控制台产生扫描码。
  因为键盘看起来和标准的AT键盘不一样(按键不对应于标准的控制台)我修改的X服务器的键盘驱动程序必须处理USB事件,并且把它们翻译成标准的扫描码。
过程(逐步地)
1)你需要获得XFree 4.0.x (RedHat 7.0 和它带来的许多最新的distros)然后将它配置成支持两个显卡和显示器。我建议你首先按照下面的帮助试一试Xinerama的扩展:http://linuxdocs.org/HOWTOs/Xinerama-HOWTO.html
2)然后修改你的XF86Config或者是XF86Config-4将你的屏幕分成两个显示区域而不是以Xinerama的扩展来使用他们。你难道不知道我在说什么吗?接着该是读XF86Config的时间了,做一个“XF86Config的帮助手册”。
有两个显示区域的XF86Config应该看起来如下所示:
Section "ServerLayout"
    Identifier "Layout0"
    Screen 0 "Screen0"
    InputDevice "Mouse0" "CorePointer"
    InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerLayout"
    Identifier "Layout1"
    Screen 0 "Screen1"
    InputDevice "Mouse0" "CorePointer"
    InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "InputDevice"
    Identifier "Keyboard0"
    Driver "keyboard"
    # this is for supporting deadkeys
    Option "XkbRules" "xfree86"
    Option "XkbModel" "pc101"
    Option "XkbLayout" "us_intl"
EndSection

Section "InputDevice"
    Identifier "Mouse0"
    Driver "mouse"
    Option "Device" "/dev/mouse"
    Option "Protocol" "IMPS/2"
    Option "Emulate3Buttons" "off"
    Option "ZAxisMapping" "4 5"
EndSection

Section "Monitor"
    Identifier "Plex17"
    VendorName "Unknown"
    ModelName "Unknown"
    HorizSync 31.5 - 79.0
    VertRefresh 50-90
EndSection

Section "Monitor"
    Identifier "Syncmaster3"
    HorizSync 31.5 - 79.0
    VertRefresh 50-70
EndSection

Section "Device"
    Identifier "FireGL 1000 PRO"
    Driver "glint"
    BusID "pci:1:0:0"
    BoardName "Unknown"
EndSection

Section "Device"
    Identifier "Voodoo"
    Driver "glide"
    BusID "pci:0:12:0"
EndSection

Section "Screen"
    Identifier "Screen0"
    Device "FireGL 1000 PRO"
    Monitor "Plex17"
    DefaultDepth 16
    Subsection "Display"
       Depth 16
       Modes "1024x768"
    EndSubSection
EndSection

Section "Screen"
    Identifier "Screen1"
    Device "Voodoo"
    Monitor "SyncMaster 3"
    DefaultDepth 16
    SubSection "Display"
       Depth 16
       Modes "800x600"
    EndSubSection
EndSection
这很容易就能做到,因为这几乎和Xinerama的配置相同,只是有两个显示区域。将你的电脑的运行级别(runlevel)调整到3(init 3),接着试一试两个显示区域,一次只试验一个:
# XFree86 -layout Layout0
# XFree86 -layout Layout1
未完待续
发表于 2004-7-26 23:08:01 | 显示全部楼层
pxe2居然是女的
你竟然也是女的   
回复

使用道具 举报

 楼主| 发表于 2004-7-27 10:41:36 | 显示全部楼层
[quote:4a0047361a="cnhnln"]pxe2居然是女的
你竟然也是女的   
这还是linux公社吗?我是不是走到女厕所了     
先看看这张照片吧作者和他女友共用一台电脑的情景,真是好浪漫哦!为了女友研究一项技术,好感动哦!

这也能感动女人的话,我现在就是在床上而不是椅子上了[/quote]
这有什么奇怪的,你不知道小苏姗。波儿加吗?她在国际象棋领域从不参加女子的比赛,在男子组也能排进前十名,我国最厉害的男选手都赢不了她!你的思想太陈腐了吧!都什么年代了阿!还歧视女性阿!
回复

使用道具 举报

发表于 2004-7-27 21:54:40 | 显示全部楼层
tracystar, 哦,绝没瞧不起女性的意思。我一向很尊重女同胞的

PS:签名太长了,占版面
回复

使用道具 举报

发表于 2004-7-28 09:26:14 | 显示全部楼层

彻底晕菜了~@_@
回复

使用道具 举报

发表于 2004-7-28 11:23:41 | 显示全部楼层
pxe2也是女的?楼主也是女的?
linux_mm年年有,今年特别多 :-)
回复

使用道具 举报

发表于 2004-7-28 13:53:40 | 显示全部楼层
唉,网络...
唉,MM。
回复

使用道具 举报

发表于 2004-7-28 14:23:21 | 显示全部楼层
我只知道pxe2好像是研究电子电气方面的,我一直以为她是male……
真是出乎意料阿
回复

使用道具 举报

发表于 2004-7-28 16:19:27 | 显示全部楼层
不是把,偶真的不是MM 阿。。。
电子电气是搞过。。。。。不过偶真的不MM阿。。。
回复

使用道具 举报

发表于 2004-7-28 22:02:05 | 显示全部楼层
唉~~~~~又一个whlvme
回复

使用道具 举报

 楼主| 发表于 2004-7-28 22:46:58 | 显示全部楼层
对不起了,一句祝福的话转移了大家的视线,希望大家多多关注技术本身哦!

接上文:
   请注意在howto中描述的BusID的设定。注意到一个双头板(例如Matrox G400)不应该通过下面的步骤来工作,因为我们将使用2个实例同相同的硬件来对话。但是我自己并没有亲自进行试验。(如果哪位读者能捐献一些显卡给我的话,我将非常乐意去尝试一下。)
   并不是所有的显卡都可以被XFree86的双头显卡所支持。不要给我写Email告诉我,你无法使你的显卡工作或者告诉我你将要发疯了。请仔细阅读Xinerama Howto,非常感谢。
2)将你的第二个鼠标插到系统上,然后配置XF86Config在第二个显示区域的参数并使用它。这个鼠标不能被其他的程序所使用,比如gpm。XF86Config会如下所示(以下我只显示出了改变的部分)
Section "ServerLayout"
    Identifier "Layout1"
    Screen 0 "Screen1"
    InputDevice "Mouse1" "CorePointer"
    InputDevice "Keyboard0" "CoreKeyboard"
EndSection


Section "InputDevice"
    Identifier "Mouse1"
    Driver "mouse"
    Option "Device" "/dev/ttyS1"
    Option "Protocol" "Microsoft"
EndSection
请再一次测试这个显示区域来确保它可以工作。
未完待续!!!!   
回复

使用道具 举报

 楼主| 发表于 2004-7-28 22:51:09 | 显示全部楼层
[quote:bc8aa7723e="cnhnln"]tracystar, 哦,绝没瞧不起女性的意思。我一向很尊重女同胞的。而且更加敬佩和崇拜你们这些技术类的女生。
JJ、JJ,教教我吧,我愿意拜你为师学习linux

PS:签名太长了,占版面[/quote]

你转身的技术真是高明哦!两个帖子口气变化真大哦!过几天你不代表中国参加雅典奥运会的跳水比赛吗?你转身的难度系数真的高不可攀哦!  给中国拿几块金牌也好阿!为国争光哦!    

    对了,你多大阿!管我叫姐姐!恐怕你没这个资格吧!     
回复

使用道具 举报

发表于 2004-7-29 23:55:38 | 显示全部楼层
Section "ServerLayout"
Identifier     "Default Layout"
Screen      0  "Screen0"
Screen      1  "Screen1" LeftOf "Screen0"
InputDevice    "Mouse0" "CorePointer"
InputDevice    "Keyboard0" "CoreKeyboard"
Option"Xinerama"  "On"
Option          "Clone"    "off"
        Option          "AllowMouseOpenFail" "boolean"
EndSection
Section "Files"
RgbPath      "/usr/X11R6/lib/X11/rgb"
        FontPath     "/usr/share/fonts/zh_CN/TrueType"
        FontPath     "/usr/share/fonts/zh_TW/TrueType"
        FontPath     "/usr/X11R6/lib/X11/fonts/local/"
        FontPath     "/usr/X11R6/lib/X11/fonts/misc/"
        FontPath     "/usr/X11R6/lib/X11/fonts/Type1/"
        FontPath     "/usr/X11R6/lib/X11/fonts/Speedo/"
        FontPath     "/usr/X11R6/lib/X11/fonts/75dpi/"
        FontPath     "/usr/X11R6/lib/X11/fonts/100dpi/"
EndSection
Section "InputDevice"
Identifier  "Keyboard0"
Driver      "keyboard"
#Option      "Protocol" "usbev"
#Option      "Device""/dev/input/event3"
Option    "XkbRules" "xfree86"
Option    "XkbModel" "pc105"
Option    "XkbLayout" "us"
EndSection
Section "InputDevice"
Identifier  "Mouse0"
Driver      "mouse"
Option    "Protocol" "IMPS/2"
Option    "Device" "/dev/input/mouse0"
Option    "ZAxisMapping" "4 5"
Option    "Emulate3Buttons" "no"
EndSection
Section "Monitor"
Identifier   "Monitor0"
VendorName   "Monitor Vendor"
ModelName    "AOC SPECTRUM 5Elr & 5ElrA & 5E & 5EA"
HorizSync    30.0 - 60.0
VertRefresh  50.0 - 120.0
Option    "dpms"
EndSection
Section "Monitor"
Identifier   "Monitor1"
VendorName   "Monitor Vendor"
ModelName    "AOC SPECTRUM 5Elr & 5ElrA & 5E & 5EA"
HorizSync    30.0 - 60.0
VertRefresh  50.0 - 120.0
Option    "dpms"
EndSection

Section "Device"
Identifier  "Videocard0"
Driver      "i810"
VendorName  "Videocard vendor"
BusID    "PCI:0:2:0"
BoardName   "S3 Trio64V2 (generic)"
EndSection
Section "Device"
Identifier  "Videocard1"
Driver      "s3virge"
VendorName  "Videocard vendor"
BusID    "PCI:1:1:0"
BoardName   "TNT2"
EndSection

Section "Screen"
Identifier "Screen0"
Device     "Videocard0"
Monitor    "Monitor0"
DefaultDepth    16
SubSection "Display"
Depth    16
Modes    "1024x768" "800x600"
EndSubSection
EndSection

Section "Screen"
Identifier "Screen1"
Device     "Videocard1"
Monitor    "Monitor1"
DefaultDepth    16
SubSection "Display"
Depth    16
Modes    "1024x768" "800x600"
EndSubSection
EndSection
回复

使用道具 举报

发表于 2004-7-29 23:56:34 | 显示全部楼层
给个扩展屏的配置。。。大家看看,这样偶就可以和MM一起看VCD边用电脑了
回复

使用道具 举报

发表于 2004-7-30 00:37:49 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-17 07:42 , Processed in 0.080785 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表