|
今天是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
未完待续 |
|