X11/DualSeat: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
мНет описания правки
 
(не показаны 43 промежуточные версии 8 участников)
Строка 1: Строка 1:
[[Category:Documentation]]
Настройка мультистанции '''DualSeat''' на паре видеокарт.
[[category:admin]]


{{Stub}}
== Введение ==
 
== Настройка мультистанции ([[X11/DualSeat|DualSeat]]) на паре видеокарт. ==
 
=== Введение ===
В этой статье рассказывается как настроить [[X11/DualSeat|DualSeat]] на паре видеокарт NVIDIA  
В этой статье рассказывается как настроить [[X11/DualSeat|DualSeat]] на паре видеокарт NVIDIA  
(встроенная+внешняя для платы со встроенным видео, либо 2 внешние для платы с 2-мя PCI-E/16)
(встроенная+внешняя для платы со встроенным видео, либо 2 внешние для платы с 2-мя PCI-E/16).
Такая конфигурация позволяет достаточно легко настроить независимые рабочие места с 3D ускроением,
Для каждого рабочего места запускается свой X-сервер.
при этом нет необходимости в запуске вложенных X - серверов.
Такая конфигурация позволяет достаточно легко настроить независимые рабочие места с 3D ускорением,
при этом нет необходимости в запуске вложенных X-серверов.


Если у вас встроенная видеокарта безальтернативно отключается при наличии внешней, или есть  
Если у вас встроенная видеокарта безальтернативно отключается при наличии внешней, или есть  
Строка 17: Строка 13:
<div style="display: inline; color: red;">Внимание!.</div>
<div style="display: inline; color: red;">Внимание!.</div>
По сообщению Vitaly Ostanin <vyt@>, у него в свое время на достаточно похожей конфигурации второй X server  
По сообщению Vitaly Ostanin <vyt@>, у него в свое время на достаточно похожей конфигурации второй X server  
намертво вешал систему. Так что крайне не советую покупать оборудование исключительно в
намертво вешал систему.  
 
Возможно, эту проблему можно обойти с помощью описанного ниже способа последовательного старта X-серверов.
Но в любом случае не советую покупать оборудование исключительно в
расчете на этот Dual Seat, оно может просто не заработать :(
расчете на этот Dual Seat, оно может просто не заработать :(


=== Бонусы ===
== Бонусы ==


1) Два полностью независимых рабочих места со своим пользователем, монитором, звуком, мышью и клавиатурой.
1) Два полностью независимых рабочих места со своим пользователем, монитором, звуком, мышью и клавиатурой.
Строка 26: Строка 25:
2) 3D ускорение на каждом рабочем месте.
2) 3D ускорение на каждом рабочем месте.


=== Пример рабочей конфигурации ===
== Пример рабочей конфигурации ==


==== конфигурация 1 (новая) ====
=== Конфигурация 1 (новая) ===
:материнка Asus M3N78 со встроенной nvidia 8200
:материнка Asus M3N78 со встроенной nvidia 8200
:внешняя nvidia 8400GS
:внешняя nvidia 8400GS
Строка 38: Строка 37:
Софт: ALT Linux 4.1/branch (архитектура x86_64), nvidia 177.80
Софт: ALT Linux 4.1/branch (архитектура x86_64), nvidia 177.80


==== конфигурация 2 (старая) ====
=== Конфигурация 2 (старая) ===
В свое время также организовал Dual Seat на следующем железе:
В свое время также организовал Dual Seat на следующем железе:
:материнка Gigabyte GA-M55plus-S3G со встроенной nvidia 6150LE (Спасибо Саше (led@) за совет)
:материнка Gigabyte GA-M55plus-S3G со встроенной nvidia 6150LE (Спасибо Саше (led@) за совет)
Строка 47: Строка 46:
:usb клавиатура A4tech-KIP800
:usb клавиатура A4tech-KIP800


Софт: nvidia 100.14.19, Бранч 4.0 (архитектура x86_64)+Сизиф 200801xx.
Софт: nvidia 100.14.19, ALT Linux 4.0/Бранч  (архитектура x86_64)+Сизиф 200801xx.
(xorg-x11-server-1.4.0.90-alt8, xorg-x11-drv-evdev-1.2.0-alt3)
(взяты xorg-x11-server-1.4.0.90-alt8, xorg-x11-drv-evdev-1.2.0-alt3 и зависимости.
пришлось еще дополнительно обновить ряд пакетов и обновить все пакеты шрифтов (важно).
в бранче 4.0 xorg-x11-drv-evdev сломан для клавиатур, да и xorg-x11-server лучше брать 1.4.0.
(в бранче 4.0 xorg-x11-drv-evdev сломан для клавиатур, да и xorg-x11-server лучше брать 1.4.0).
для нового xorg пришлось еще обновить все пакеты шрифтов (важно)).


=== Грабли при параллельном запуске ===
== Тонкости запуска X-серверов ==


1) В указанной конфигурации нельзя инициализировать 2 X сервера одновременно (повиснет).
В указанной конфигурации нельзя инициализировать 2 X-сервера одновременно (повиснет).
[[X11/IsolateDevice|IsolateDevice]] с PCIe не работает :(
[[X11/IsolateDevice|IsolateDevice]] с PCIe не работает :(
Возможно, в новых ядрах помог бы [http://www.x.org/wiki/VgaArbiter vga arbitration] (когда настраивал DualSeat, его еще не было).


После того, как X сервер первый раз запустился (и выполнил какую-то инициализацию железа, -probeonly недостаточно),  
После того, как X-сервер первый раз запустился (и выполнил какую-то инициализацию железа, -probeonly недостаточно),  
уже можно оба X сервера останавливать и запускать одновременно.
уже можно оба X-сервера останавливать и запускать одновременно.
При чем дополнительно пришлось (в новой конфигурации) указать
При чем дополнительно пришлось (в новой конфигурации) указать
<pre>
<pre>
Строка 67: Строка 67:
Возможные варианты:
Возможные варианты:


==== а) последовательный запуск X - серверов. ====
=== а) последовательный запуск X-серверов ===


a1) запуск 1-го сервера через DM, второго с консоли.
==== a1) запуск 1-го сервера через DM, второго с консоли ====
Конфигурация WDM для запуска только seat0:
Конфигурация WDM для запуска только seat0:
<pre>cat /etc/X11/wdm/Xservers
<pre>cat /etc/X11/wdm/Xservers
Строка 75: Строка 75:
</pre>
</pre>
Приходится при загрузке запускать 1 сервер, а потом с консоли запускать второй.
Приходится при загрузке запускать 1 сервер, а потом с консоли запускать второй.
При этом либо нужно убрать
При этом либо в seat0 нужно убрать
:      Option "ProbeAllGpus"  "False"
:      Option "ProbeAllGpus"  "False"
чтобы первый X - сервер выполнил инициализацию,  
чтобы первый X-сервер выполнил инициализацию,  
либо использовать принудительную инициализацию (см. x-multiseat-preinit).
либо использовать принудительную инициализацию (см. x-multiseat-preinit).


первый X сервер надо пускать без -sharevts. Иначе gpm получит доступ к видеопамяти и станет ее портить.
первый X-сервер надо пускать без -sharevts. Иначе gpm получит доступ к видеопамяти и станет ее портить.
(Артефакты на экране при движении мышью).
(Артефакты на экране при движении мышью).
Второй X сервер можно пускать командой
Второй X-сервер можно пускать командой
<pre>$ cat ~/bin/X2  
<pre>$ cat ~/bin/X2  
startx -- :1 -layout seat1 -novtswitch -sharevts vt8 -nolisten tcp</pre>
startx -- :1 -layout seat1 -novtswitch -sharevts vt8 -nolisten tcp</pre>


a2) запуск серверов через DM последовательно.
==== a2) запуск серверов через DM последовательно ====


Сложность задачи в том, что нужно заставить DM запускать X сервера последовательно,
Сложность задачи в том, что нужно заставить DM запускать X-сервера последовательно,
один за другим. Иначе, например, wdm c конфигурацией
один за другим. Иначе, например, wdm c конфигурацией
<code>cat /etc/X11/wdm/Xservers</code>
<code>cat /etc/X11/wdm/Xservers</code>
<pre>:0 local /usr/bin/X :0 -layout seat0
<pre>
:1 local /usr/bin/X :1 -novtswitch -sharevts -layout seat1</pre>
# DualSeat: -novtswitch -sharevts is nesessary when we launch X from X
# -nolisten tcp here is not related to DualSeat; just for security
# note: wdm will launch servers in reverse order.
:1 local /usr/bin/X :1 -novtswitch -sharevts -layout seat1 -nolisten tcp
:0 local /usr/bin/X :0 -layout seat0 -nolisten tcp
</pre>
пытается запустить 2 X-сервера одновременно, что намертво вешает систему, если
пытается запустить 2 X-сервера одновременно, что намертво вешает систему, если
не выполнялась преинициализация (см. ниже).
не выполнялась преинициализация либо не использовался патченный wdm (см. ниже).


В DM, которым я пользовался (wdm), опции для последовательного запуска X серверов не нашел.
В DM, которым я пользовался (wdm), опции для последовательного запуска X-серверов не нашел.
При желании можно было бы пропатчить wdm, чтобы он запускал X сервера последовательно, но
Читатели могут попытаться разобраться со своим DM самостоятельно. Что касается wdm, то я
я пошел путем b), а читатели могут попытаться разобраться со своим DM самостоятельно.
сначала пошел путем b), но потом, столкнувшись с некоторой нестабильностью,
все же пропатчил wdm, чтобы он запускал X сервера последовательно.


==== b) параллельный запуск X- серверов с преинициализацией. ====
Простейший патч
<pre>
--- wdm-1.28/src/wdm/dm.c 2009-02-05 22:51:40 +0200
+++ wdm-1.28/src/wdm/dm.c 2009-02-05 23:02:11 +0200
@@ -685,6 +685,8 @@
WDMDebug("pid: %d\n", pid);
d->pid = pid;
d->status = running;
+ /* TODO: check a predeclared X resource here */
+ if (1) WaitForServer (d);
break;
    }
}
</pre>
 
Более сложный
[http://git.altlinux.org/people/viy/packages/?p=wdm.git;a=patch;h=f74f62f9d1681ae4eb9bf58b026ded646184583d патч с поддержкой X ресурса DisplayManager*wdmSequentialXServerLaunch].
При использовании второго патча в wdm-config нужно добавить строчку
 
DisplayManager*wdmSequentialXServerLaunch:  true
 
=== b) параллельный запуск X-серверов с преинициализацией ===


Принудительная предварительная инициализация видеокарт + последующий параллельный запуск
Принудительная предварительная инициализация видеокарт + последующий параллельный запуск
X- серверов.
X-серверов.


Идея следующая: Перед запуском сервиса dm запускается X - сервер, который делает  
Идея следующая: Перед запуском сервиса dm запускается X-сервер, который делает  
первичную инициализацию (используя конфигурацию с доступом ко всем видеокартам. Например, "ServerLayout" "dualhead")
первичную инициализацию, используя конфигурацию с доступом ко всем видеокартам. Например, используя "ServerLayout" "dualhead".


Соответствующий скрипт оформлен в пакет X-multiseat-preinit.
Соответствующий скрипт оформлен в пакет [http://www.sisyphus.ru/srpm/Sisyphus/X-multiseat-preinit X-multiseat-preinit]
([http://git.altlinux.org/people/viy/packages/?p=X-multiseat-preinit.git;a=summary git]).


Конфигурация WDM в расчете на X-multiseat-preinit:
Конфигурация WDM в расчете на X-multiseat-preinit:
Строка 116: Строка 144:
</pre>
</pre>


=== Другие грабли ===
== Другие грабли c X ==


<pre>Option "AutoAddDevices" "false"</pre>
<pre>Option "AutoAddDevices" "false"</pre>
Строка 122: Строка 150:
свободные мыши и клавиатуры серверу, который успел запуститься раньше.
свободные мыши и клавиатуры серверу, который успел запуститься раньше.


=== Разделение звука между рабочими местами. ===
== Совместный доступ к периферии ==


=== xorg.conf ===
=== Печать ===
<source lang="xorg_conf">
 
Добавил всех пользователей в группу lp.
 
== Разделение звука между рабочими местами ==
 
При желании достаточно всего одной многоканальной звуковой карты,
на alsa wiki рассказывается, как, например, из одной 4-х канальной звуковой карты сделать 2 виртуальные 2-х
канальные.
 
Однако из-за избытка железа в DualSeat оказалось 3 звуковых карты:
:1) встроенная в материнскую плату => наушники 1
:2) встроенная в USB клавиатуру => наушники 2
:3) внешняя PCI => выход на колонки.
 
для переключения вывода звука между колонками и наушниками используется [http://www.sisyphus.ru/srpm/Sisyphus/asoundconf-gtk asoundconf-gtk] ([http://git.altlinux.org/people/viy/packages/?p=asoundconf-gtk.git;a=summary git]).
 
== xorg.conf ==
<source lang="text">
Section "ServerFlags"
Section "ServerFlags"
# Option "AllowMouseOpenFail" "true"
# Option "AllowMouseOpenFail" "true"
# Option "AllowEmptyInput" "true"
# Option "AllowEmptyInput" "true"
Option "DefaultServerLayout"  "seat0"
Option "DefaultServerLayout"  "dualhead"
# Option "DefaultServerLayout"  "dualhead"
# Option "DefaultServerLayout"  "default"
Option "AutoAddDevices" "false"
Option "AutoAddDevices" "false"
EndSection
Section "ServerLayout"
Identifier    "default"
Screen        "Screen0" 0 0
InputDevice    "Keyboards" "CoreKeyboard"
InputDevice    "mice"
EndSection
EndSection


Строка 341: Строка 377:
</source>
</source>


=== Полезные ссылки ===
== Полезные ссылки ==
* [http://www.newmoldova.com/?q=node/463 Два рабочих места из одного компьютера на Linux Gentoo]
* [http://web.archive.org/web/20140528093244/http://www.automation.dn.ua/linux/3d-multiseat.html «Создание 3D Multiseat на основе debian»]
* [http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1216232698 linux.org.ua «3D Multiseat» (укр.)]
* [http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1216232698 linux.org.ua «3D Multiseat» (укр.)]
* [http://lafox.net/support/index.php?showtopic=19511 multiseat на форуме lafox.net]
<!-- * [http://lafox.net/support/index.php?showtopic=19511 multiseat на форуме lafox.net] -->
* [http://www.automation.dn.ua/linux/3d-multiseat.html www.automation.dn.ua «Создание 3D Multiseat на основе debian»]
* [http://web.archive.org/web/20101030044616/http://wiki.c3sl.ufpr.br/multiseat/index.php/Main_Page Multiseat wiki] (архив)
* [https://wiki.gentoo.org/wiki/Multiseat Gentoo Wiki]
* [https://wiki.archlinux.org/index.php/xorg_multiseat Arch Wiki]
* [https://help.ubuntu.com/community/MultiseatX MultiseatX Community Ubuntu Documentation]
* [http://wpkg.org/Configuring_multiseat_X_workstation Configuring multiseat X workstation]
* [http://web.archive.org/web/20160603184846/http://blog.chris.tylers.info/index.php?/archives/184-Multiseat-on-Dual-ATI-and-Dual-NVIDIA.html Работоспособность Multiseat на различных железках/драйверах] (2009)
* [https://bugs.launchpad.net/ubuntu/+source/console-cyrillic/+bug/520546/comments/8 про GrabDevice при улетании evdev-ввода вместо графики в консоль]
* страница ссылок [[MultiHead|MultiHead]]
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}

Текущая версия от 12:12, 21 апреля 2022

Настройка мультистанции DualSeat на паре видеокарт.

Введение

В этой статье рассказывается как настроить DualSeat на паре видеокарт NVIDIA (встроенная+внешняя для платы со встроенным видео, либо 2 внешние для платы с 2-мя PCI-E/16). Для каждого рабочего места запускается свой X-сервер. Такая конфигурация позволяет достаточно легко настроить независимые рабочие места с 3D ускорением, при этом нет необходимости в запуске вложенных X-серверов.

Если у вас встроенная видеокарта безальтернативно отключается при наличии внешней, или есть только внешняя двухголовая видеокарта, то вам сюда: /AltLinux/Dokumentacija/Multistation.

Внимание!.

По сообщению Vitaly Ostanin <vyt@>, у него в свое время на достаточно похожей конфигурации второй X server намертво вешал систему.

Возможно, эту проблему можно обойти с помощью описанного ниже способа последовательного старта X-серверов. Но в любом случае не советую покупать оборудование исключительно в расчете на этот Dual Seat, оно может просто не заработать :(

Бонусы

1) Два полностью независимых рабочих места со своим пользователем, монитором, звуком, мышью и клавиатурой.

2) 3D ускорение на каждом рабочем месте.

Пример рабочей конфигурации

Конфигурация 1 (новая)

материнка Asus M3N78 со встроенной nvidia 8200
внешняя nvidia 8400GS
2 монитора
2 мыши Logitech (usb+usb)
ps/2 клавиатура
usb клавиатура A4tech-KIP800

Софт: ALT Linux 4.1/branch (архитектура x86_64), nvidia 177.80

Конфигурация 2 (старая)

В свое время также организовал Dual Seat на следующем железе:

материнка Gigabyte GA-M55plus-S3G со встроенной nvidia 6150LE (Спасибо Саше (led@) за совет)
внешняя nvidia 8400GS
2 монитора
2 мыши Logitech (ps/2+usb)
ps/2 клавиатура
usb клавиатура A4tech-KIP800

Софт: nvidia 100.14.19, ALT Linux 4.0/Бранч (архитектура x86_64)+Сизиф 200801xx. (взяты xorg-x11-server-1.4.0.90-alt8, xorg-x11-drv-evdev-1.2.0-alt3 и зависимости. в бранче 4.0 xorg-x11-drv-evdev сломан для клавиатур, да и xorg-x11-server лучше брать 1.4.0. для нового xorg пришлось еще обновить все пакеты шрифтов (важно)).

Тонкости запуска X-серверов

В указанной конфигурации нельзя инициализировать 2 X-сервера одновременно (повиснет). IsolateDevice с PCIe не работает :( Возможно, в новых ядрах помог бы vga arbitration (когда настраивал DualSeat, его еще не было).

После того, как X-сервер первый раз запустился (и выполнил какую-то инициализацию железа, -probeonly недостаточно), уже можно оба X-сервера останавливать и запускать одновременно. При чем дополнительно пришлось (в новой конфигурации) указать

       Option "ProbeAllGpus"  "False"

чтобы система не зависала, в старой конфигурации можно было не указывать.

Возможные варианты:

а) последовательный запуск X-серверов

a1) запуск 1-го сервера через DM, второго с консоли

Конфигурация WDM для запуска только seat0:

cat /etc/X11/wdm/Xservers
:0 local /usr/bin/Xorg :0 -layout seat0

Приходится при загрузке запускать 1 сервер, а потом с консоли запускать второй. При этом либо в seat0 нужно убрать

Option "ProbeAllGpus" "False"

чтобы первый X-сервер выполнил инициализацию, либо использовать принудительную инициализацию (см. x-multiseat-preinit).

первый X-сервер надо пускать без -sharevts. Иначе gpm получит доступ к видеопамяти и станет ее портить. (Артефакты на экране при движении мышью). Второй X-сервер можно пускать командой

$ cat ~/bin/X2 
startx -- :1 -layout seat1 -novtswitch -sharevts vt8 -nolisten tcp

a2) запуск серверов через DM последовательно

Сложность задачи в том, что нужно заставить DM запускать X-сервера последовательно, один за другим. Иначе, например, wdm c конфигурацией cat /etc/X11/wdm/Xservers

# DualSeat: -novtswitch -sharevts is nesessary when we launch X from X
# -nolisten tcp here is not related to DualSeat; just for security
# note: wdm will launch servers in reverse order.
:1 local /usr/bin/X :1 -novtswitch -sharevts -layout seat1 -nolisten tcp
:0 local /usr/bin/X :0 -layout seat0 -nolisten tcp 

пытается запустить 2 X-сервера одновременно, что намертво вешает систему, если не выполнялась преинициализация либо не использовался патченный wdm (см. ниже).

В DM, которым я пользовался (wdm), опции для последовательного запуска X-серверов не нашел. Читатели могут попытаться разобраться со своим DM самостоятельно. Что касается wdm, то я сначала пошел путем b), но потом, столкнувшись с некоторой нестабильностью, все же пропатчил wdm, чтобы он запускал X сервера последовательно.

Простейший патч

--- wdm-1.28/src/wdm/dm.c	2009-02-05 22:51:40 +0200
+++ wdm-1.28/src/wdm/dm.c	2009-02-05 23:02:11 +0200
@@ -685,6 +685,8 @@
 	WDMDebug("pid: %d\n", pid);
 	d->pid = pid;
 	d->status = running;
+	/* TODO: check a predeclared X resource here */
+	if (1) WaitForServer (d);
 	break;
     }
 }

Более сложный патч с поддержкой X ресурса DisplayManager*wdmSequentialXServerLaunch. При использовании второго патча в wdm-config нужно добавить строчку

DisplayManager*wdmSequentialXServerLaunch:   true

b) параллельный запуск X-серверов с преинициализацией

Принудительная предварительная инициализация видеокарт + последующий параллельный запуск X-серверов.

Идея следующая: Перед запуском сервиса dm запускается X-сервер, который делает первичную инициализацию, используя конфигурацию с доступом ко всем видеокартам. Например, используя "ServerLayout" "dualhead".

Соответствующий скрипт оформлен в пакет X-multiseat-preinit (git).

Конфигурация WDM в расчете на X-multiseat-preinit:

cat /etc/X11/wdm/Xservers
:0 local /usr/bin/X :0 -layout seat0
:1 local /usr/bin/X :1 -novtswitch -sharevts -layout seat1

Другие грабли c X

Option "AutoAddDevices" "false"

Добавить обязательно, иначе hal попытается автоматически отдать все свободные мыши и клавиатуры серверу, который успел запуститься раньше.

Совместный доступ к периферии

Печать

Добавил всех пользователей в группу lp.

Разделение звука между рабочими местами

При желании достаточно всего одной многоканальной звуковой карты, на alsa wiki рассказывается, как, например, из одной 4-х канальной звуковой карты сделать 2 виртуальные 2-х канальные.

Однако из-за избытка железа в DualSeat оказалось 3 звуковых карты:

1) встроенная в материнскую плату => наушники 1
2) встроенная в USB клавиатуру => наушники 2
3) внешняя PCI => выход на колонки.

для переключения вывода звука между колонками и наушниками используется asoundconf-gtk (git).

xorg.conf

Section "ServerFlags"
#	Option "AllowMouseOpenFail" "true"
#	Option "AllowEmptyInput" "true"
	Option "DefaultServerLayout"  "dualhead"
	Option "AutoAddDevices" "false"
EndSection

Section "ServerLayout"
    Identifier     "dualhead"
    InputDevice    "Keyboards" "CoreKeyboard"
    InputDevice    "mice" "CorePointer"
    Screen    0    "Screen0" 0 0
    Screen    1    "Screen1" RightOf "Screen0"
EndSection

Section "ServerLayout"
    Identifier     "xinerama"
    InputDevice    "Keyboards" "CoreKeyboard"
    InputDevice    "mice" "CorePointer"
    Screen    0    "Screen0" 0 0
    Screen    1    "Screen1" RightOf "Screen0"
    Option         "Xinerama" "on"
EndSection

Section "ServerLayout"
    Identifier     "seat0"
    InputDevice    "Keyboard0e" "CoreKeyboard"
    InputDevice    "usbmouse0" "CorePointer"
    Screen    0    "Screen0" 0 0
# the same as IsolateDevice, but use bus id from "device" section
# note: only make things worse
#       Option "SingleCard" "true"
EndSection

Section "ServerLayout"
    Identifier     "seat1"
# this usb keyboard has separate core and multimedia parts
    InputDevice    "Keyboard1e.0" "CoreKeyboard"
    InputDevice    "Keyboard1e.1" "SendCoreEvents"
    InputDevice    "Keyboard1e.2" "SendCoreEvents"
    InputDevice    "usbmouse1" "CorePointer"
    Screen    0    "Screen1" 0 0
#       Option "SingleCard" "true"
EndSection


Section "Module"
	Load  "freetype"
	Load  "glx"
	Load  "dri"
	Load  "dbe"
	SubSection "extmod"
		Option	    "omit xfree86-dga"
	EndSubSection
EndSection

Section "InputDevice"
	Identifier  "Keyboards"
	Driver      "kbd"
	Option         "AutoRepeat" "250 40"
	#Option      "XkbModel" "pc105"
	Option      "XkbModel" "a4techKBS8"
	#Option      "XkbLayout" "us,ru,ua"
	#Option      "XkbVariant" ",winkeys,winkeys"
	#Option      "XkbOptions" "grp:menu_toggle,grp_led:scroll"
EndSection

Section "InputDevice"
    Identifier     "Keyboard0e"
    Driver		"evdev"
    Option		"Device" "/dev/input/by-path/platform-i8042-serio-0-event-kbd"
    Option      "XkbModel" "evdev"
#    Option      "XkbLayout" "us,ru,ua"
#    Option      "XkbVariant" ",winkeys,winkeys"
#    Option      "XkbOptions" "grp:menu_toggle,grp_led:scroll"
EndSection

Section "InputDevice"
# keyboard 1 - the main part (useful keys)
    Identifier     "Keyboard1e.0"
    Driver		"evdev"
    Option		"Device" "/dev/input/by-path/pci-0000:00:02.1-usb-0:1.1:1.0-event-kbd"
    Option      "XkbModel" "evdev"
#    Option      "XkbLayout" "us,ru,ua"
#    Option      "XkbVariant" ",winkeys,winkeys"
#    Option      "XkbOptions" "grp:menu_toggle,grp_led:scroll"
EndSection

Section "InputDevice"
# keyboard 1 - the extra part (multimedia keys)
	Identifier     "Keyboard1e.1"
	Driver		"evdev"
	Option		"Device" "/dev/input/by-path/pci-0000:00:02.1-usb-0:1.1:1.1-event-"
EndSection

Section "InputDevice"
# keyboard 1 - the extra part (multimedia keys)
# seems to be exact clone of "Keyboard1e.1"
	Identifier     "Keyboard1e.2"
	Driver		"evdev"
	Option		"Device" "/dev/input/by-path/pci-0000:00:02.1-usb-0:1.2:1.3-event-"
EndSection

Section "InputDevice"
	Identifier  "mice"
	Driver      "mouse"
	Option	    "Device" "/dev/input/mice"
	Option	    "Protocol" "IMPS/2"
	Option	    "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
	Identifier  "usbmouse0"
	Driver      "mouse"
	Option	    "Device" "/dev/input/by-path/pci-0000:00:02.0-usb-0:3:1.0-mouse"
	Option	    "Protocol" "IMPS/2"
	Option	    "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
	Identifier  "usbmouse1"
	Driver      "mouse"
	Option	    "Device" "/dev/input/by-path/pci-0000:00:04.0-usb-0:1:1.0-mouse"
	Option	    "Protocol" "IMPS/2"
	Option	    "ZAxisMapping" "4 5"
EndSection

Section "Monitor"
	Identifier   "Monitor0"
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    Option "DPMS" "true"
EndSection

Section "Device"
	Identifier  "CardInt"
	Driver      "nvidia"
        BoardName   "GeForce 8200"
        BusID       "PCI:2:0:0"
        Option "NoLogo"        "True"
       Option "ProbeAllGpus"  "False"
EndSection

Section "Device"
	Identifier  "CardExt"
	Driver      "nvidia"
        BoardName   "GeForce 8400 GS"
        BusID       "PCI:3:0:0"
        Option "NoLogo"        "True"
       Option "ProbeAllGpus"  "False"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "CardExt"
	Monitor    "Monitor0"
	DefaultDepth     24
	SubSection "Display"
		Depth     8
		Modes      "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
	EndSubSection
	SubSection "Display"
		Depth     15
		Modes      "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
	EndSubSection
	SubSection "Display"
		Depth     16
		Modes      "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
	EndSubSection
	SubSection "Display"
		Depth     24
		Modes      "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
	EndSubSection
	SubSection "Display"
		Depth     32
		Modes      "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
	EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "CardInt"
    Monitor        "Monitor1"
    DefaultDepth    24
    SubSection     "Display"
        Depth       8
        Modes      "1680x1050" 
    EndSubSection
    SubSection     "Display"
        Depth       16
        Modes      "1680x1050" 
    EndSubSection
    SubSection     "Display"
        Depth       24
        Modes      "1680x1050" 
    EndSubSection
EndSection

Section "DRI"
	Group        "xgrp"
	Mode         0660
EndSection

Полезные ссылки