Инструкция по настройке Multiseat Поддубный Виталий ООО «Манускрипт Солюшн» г.Тула email: [email protected] 27.12.2008г. Обновлено: 31.07.2011г. ВВЕДЕНИЕ Среди современных офисных компьютеров трудно найти такие, ресурсы которых использова лись хотя бы на одну треть. С развитием фирмы как правило возникает потребность в новых рабо чих местах, на которые нужно приобретать дополнительные компьютеры. Если Ваш компьютер страдает от избыточной мощности и вы желаете её задействовать, при этом сэкономив до 40% на покупке нового компьютера, эта статья — для Вас. В данной статье рассматривается возможность организации на одном компьютере сразу несколь ких рабочих мест. В разных источниках этот способ может называться Multiterminal, Multistation, Multihead, Multiseat и т. д. Мы же для простоты будем называть его последним термином «муль тисит». В системах Линукс есть несколько вариантов реализации мультисита. Самый популярный из них — за счёт Xсервера Xorg с драйверами evdev (это единственный вариант, который реализуется по принципу «1видеокарта = 1 монитор», все остальные рассмотренные ниже варианты позволяют реа лизовать мультисит даже на одной видеокарте с двумя выходами). Принцип действия заключается в том, что на каждой видеокарте стартует отдельный сеанс X сервера. Этот вариант наиболее надёжен, стабилен, плюс ещё на каждом месте работает 3D ускорение, следовательно на одном компьютере можно не только вдвоём работать, но и играть, всё зависит от мощности «железа». Раньше этот вариант был самым дорогим в плане стоимости комплектующих, нужно было покупать материнские платы с двумя разъёмами PCIE и две видео карты. Реализовать его на «офисных» материнских платах было очень тяжело, поскольку встроен ная видеокарта отключалась при установке внешней, старые видеокарты PCI найти практически не возможно, а новые (серии Matrox G450/550 и Nvidia Quadro NVS280) стоят очень дорого. Сейчас же недорогие материнские платы сделаны таким образом, что при установке внешней видеокарты встроенная продолжает работать (если только её не отключить вручную в BIOS'е). В интернете есть очень много различных описаний мультисита на X/Xorg'е, самый популярный пример для си стемы Debian можно посмотреть здесь: http://www.automation.dn.ua/linux/3dmultiseat.html Очень оригинальна идея с использованием MPX (использование двух клавиатур и двух мышек на одном рабочем столе), это не мультисит, но попробовать стоит: http://wearables.unisa.edu.au/mpx/?q=main_ru Второй по популярности вариант — использование вложенного Xсервера Xephyr. Этот вариант в отличии от предыдущего позволяет реализовать мультисит на одной видеокарте с двумя видеовы ходами. Принцип действия таков: сначала стартует основной Xсервер, а поверх него стартуют несколько сеансов Xephyrсервера. Этот вариант считается бюджетным, поскольку позволяет реа лизовать большее количество мест, но у него есть довольно много недостатков. Например, не рабо тает 3Dускорение (хотя в последних версиях появилась поддержка OpenGL), меньшая стабиль ность, меньшая скорость работы (поскольку Xephyr сам по себе довольно «медлительный»), нет поддержки изменения разрешения экрана «на лету». Но работы на этим проектом продолжаются, недостатки устраняются, появляются новые возможности. Вместе с проектом Xephyr развивается ещё один — Xnest, который не пользуется популярностью изза ещё большего количества недостатков. Поэтому и я вам применять на практике его не реко мендую. Третий вариант – использование программы Multiplier от компании Userful. Эта утилита являет ся платной, её стоимость составляет 99$ за каждое рабочее место (для учебных учреждений 69$). Вы также получите USBхаб для подключения клавиатуры, мыши и наушников. Однако на 2 рабо чих места программу можно использовать бесплатно в домашних условиях, но её всё равно необхо димо регистрировать через интернет для получения ключа. Если вы её не зарегистрируете, то про грамма через произвольные промежутки времени будет отключать все мониторы на 20 секунд и по казывать окно с предупреждением. Ключ на 2 монитора генерируется в зависимости от адреса элек тронной почты и IPадреса, с которого был отправлен запрос на получение ключа. Установить программу можно либо прямо из репозиториев Ubuntu, либо скачав установочный пакет с официального сайта: http://userful.com/support/alldownloads/umxdownload Принцип действия программы заключается в следующем: запускается пропатченный Xorg, кото рый затем запускает эмуляцию виртуального рабочего стола для каждого пользователя, а модифи цированный HAL привязывает к каждому пользователю нужное оборудование с нужными правами. В итоге получается выигрыш в быстродействии, но про 3Dэффекты можно забыть, поскольку раз работчики их выключают. Естественно, все патчи являются закрытыми. Небольшая рекомендация: если после установки этой программы не стартуют ситы ни на одном месте, то нужно перезагрузить систему в безопасный режим и подредактировать файл /etc/X11/userful.Mxorg.conf: в секции [Device] необходимо прописать для всех мониторов вместо "CRT, CRT" параметр "CRT, DFP", чтобы активировать выход DVI. Для некоторых видеокарт (в частности класса LE Lite Edition) также необходимо отключить турбокэш. Для данной программы к сожалению кейгена или кряка пока что не существует. Однако есть не большой трюк, который позволяет получить бесплатно любое количество рабочих мест, чтобы при этом мониторы не отключались. Во время загрузки система проверяет ключ, и если он триальный, то включаются все мониторы, но в произвольные моменты времени они будут блокироваться на 10 20 секунд. Если же вы получили бесплатный ключ на 2 рабочих места, то будут работать только 2 монитора, все остальные больше загружаться не будут. А вот если системе дать загрузиться с три альным ключом, а после загрузки в каталог /etc/X11/ закинуть любой рабочий ключ (пусть даже на 2 монитора), то мониторы блокироваться не будут. За разъяснения отдельная благодарность LuckAs'у из города Хмельницкий. Есть также проект OpenUserful с открытыми исходниками, но он уже несколько лет не развива ется. Суть его сводится к накладыванию патчей на исходники некоторых элементов системы. Если кому будет интересно покопаться, вот ссылки: http://openuserful.sourceforge.net/wiki/index.php/Main_Page http://sourceforge.net/project/showfiles.php?group_id=153260 Есть ещё один вариант реализации мультсита — при помощи XGLсервера. Этот вариант также позволяет реализовать мультисит на одной видеокарте, при этом полностью поддерживает 3D, по сравнению с Xephyr он более стабилен и обладает меньшим количеством недостатков. XGL изна чально не поддерживает драйверы клавиатуры/мыши evdev, и чтобы не накладывать патчи на исход ники, бельгийским программистом Jori Liesenborgs была написана программа Xevdevserver, которая позволяет привязать каждую пару клавиатуры/мыши к конкретному рабочему месту. Кстати, эта программа очень хорошо подходит и для мультиситов на основе Xephyr и Xorg, и если у вас возни кают проблемы с драйверами evdev (всяко в жизни бывает), рекомендую применить Xevdevserver. К сожалению проект XGL уже давно заброшен, пакеты от старых дистрибутивов в новых систе мах работают некорректно, а собрать пакет под последние версии Линуксов практически невоз можно, поскольку нужно «допиливать» исходники. Однако на старых версиях дистрибутивов (Ubuntu 8.04, Fedora8, Debian4 и т.д.) его можно настроить. Оригинал статьи по настройке XGL, а также необходимые файлы, можно найти на сайте: http://research.edm.uhasselt.be/~jori/page/index.php?n=Misc.DualSeatX Вариант конфигурирования "мультиситналету" под Ubuntu: http://ubuntuforums.org/showthread.php?t=707796 На смену XGLсерверу приходит новый метод, который позволяет запускать на одной видеокар те два сеанса Xorg, каждый на своём видеовыходе. Для реализации этого метода необходимо нало жить патч на ядро и libdrm, который позволяет для каждого выхода карты создать свое dri устрой ство в /dev/dri/. Каждый Xсервер запускается с указанием переменной, которая используется в libdrm: export DRM_DEVICE_PATH=/dev/dri/renderD128 startx /usr/bin/Xorg :0 layout seat0 retro novtswitch Второй Xсервер соответственно запускается с параметром renderD129, ключом layout seat1 и дополнительным ключом sharevts. Адрес статьи: http://airlied.livejournal.com/72187.html Нужные файлы можно скачать отсюда: http://people.freedesktop.org/~airlied/multiseat/ После наложения патчей необходимо создать файл xorg.conf аналогично мультиситу на Xorg, но в секциях для видеокарт должна быть прописана одна карта, только разные видеовыходы. У этого способа есть некоторые ограничения: нужно использовать только видеокарты ATI со свободным драйвером "radeon" (с другими видеокартами автор метода не экспериментировал), и пока что рабочие места надо загружать вручную (ещё не нашли способ, как менеджеру загрузки GDM или KDM передать параметр DRM_DEVICE_PATH). Общие принципы конфигурирования системы во всех случаях практически одинаковы. Настрой ка мультисита осуществляется в несколько шагов: 1) установка драйверов для видеокарт 2) выполнение важных системных настроек 2) конфигурирование файла xorg.conf 3) установка необходимых программ и создание скриптов 4) настройка менеджера загрузки (GDM, KDM) 5) «допиливание» системы В качестве экспериментов я использовал дистрибутив Ubuntu, поэтому все пути к конфигураци онным файлам указаны применительно к этой системе, но эта статья может быть применена и к другим системам.
БЛАГОДАРНОСТИ Хочу поблагодарить следующих людей за помощь в подготовке статьи: 1) Андрея Darion 'а — за консультации и его статью «3D Multiseat», из которой я взял довольно много материала: http://www.automation.dn.ua/linux/3dmultiseat.html 2) Артёма Мороза — за советы и дополнения; Артём занимается проблемами мультисита не только в системе Linux, но и в windows, им и его командой была написана программа FriendlySeats для систем Windows и Linux: http://friendlyseats.com 3) Артура с форума http://forum.lafox.net/ за дополнительные скрипты для разруливания флэшек и звуковых карт в мультисите, а также за консультации по XGL; 4) Martijn Bastiaan из Нидерландов за рекомендации по GDM 2.30, его блог: http://multiseatonlinux.blogspot.com/ Также очень хорошо и довольно подробно написана статья по мультиситу на Ubuntu 10.04, мно гие тонкости настройки системы из неё я включил в своё описание: http://habrahabr.ru/blogs/linux/112534/
РЕКОМЕНДАЦИИ Сначала я дам некоторые рекомендации, как правильно подобрать конфигурацию компьютера для мультисита. Не рекомендую применять для мультисита старые PCIвидеокарты Matrox, S3 Trio и т.д., потому как последние версии драйверов, которые входят в состав любого дистрибутива, сделаны очень криво, и вы больше потратите время на устранение багов, а результатов можете не добиться. Также желательно, чтобы все видеокарты были из одной серии (GeForce или Radeon). Именно поэтому материнские платы на базе процессоров AMD находятся в более выигрышном положении по сравнению с Intel, поскольку у них интегрированная видеокарта принадлежит к серии Radeon, и следовательно внешнюю можно применить из этой же серии. Может быть в магазинах ещё продают ся материнские платы на базе чипсета nForce, и тогда внешняя видеокарта также будет из серии GeForce, что является вариантом получше: с драйверами GeForce проблем возникает меньше, чем с Radeon'ами. Я уже пробовал настраивать мультисит с применением внешней видеокарты GeForce и интегри рованной Intel G31/33. Хотя профессионалы и говорят, что мультисит с разными видеокартами об ладает гораздо меньшей стабильностью, у меня результат получился очень неплохой, эта система стабильно работает на Ubuntu 8.04. Проблемы возникли только в двух вещах: 1) файл xorg.conf при шлось делать практически вручную; 2) на некоторых компьютерах, если прописать для видеокарты Intel драйвер "intel", возникали графические баги, поэтому пришлось прописывать драйвер "vesa" (вы не поверите, но видеокарты Intel единственные, которые могут работать с этим драйвером в мультисите!). С чем связано возникновение этих багов, я отследить не смог, поскольку проблема носила плавающий характер. Также очень хорошо работает комбинация Intel — Radeon, тем более в последних версиях Ли нуксов не нужно заморачиваться с проприетарными драйверами, в мультиситах прекрасно работа ют и открытые драйвера для этих карт. Но приготовьтесь к тому, что при использовании разных видеокарт ускорение и спецэффекты у вас будут работать только на одном месте. Теперь по поводу материнских плат. Если для мультисита вы планируете задействовать интегри рованную видеокарту, то очень важно подобрать такую материнскую плату, у которой эта карта не отключается при установке внешней. Поэтому в первую очередь рекомендую материнские платы фирмы Gigabyte, у них такой проблемы нет. У фирмы Asus такие проблемы есть, и здесь уже очень важно знать конкретную модель платы, отвечающей указанному выше требованию. Материнские платы фирм MSI, Elitegroup, Foxconn, Intel и других фирм я особо не тестировал (платы Intel очень дорогие и «капризные», а остальные мне не так сильно нравятся, как Gigabyte и Asus). Определитесь, какое количество мест вам необходимо. Если вам достаточно двух рабочих мест на одном компьютере, тогда однозначно рекомендую самый первый вариант на Xorg'е. Самым иде альным будет вариант, реализованный по принципу «1 место = 1 внешняя видеокарта GeForce = 1 монитор = 1 ядро процессора», но он будет и самым дорогим. Вариант на базе процессора AMD на материнской плате mATX с внешней и интегрированной видеокартами Radeon будет ощутимо де шевле. Ну и самым дешёвым получится вариант на базе двухъядерного процессора Celeron на мате ринской плате mATX с интегрированной видеокартой Intel и внешней GeForce. Если же вы хотите из своего компьютера выжать максимум рабочих мест при минимальных за тратах, тогда обратите внимание на Xephyr. Вариант с XGL будет однозначно лучше, но вам придётся использовать дистрибутивы старых версий, например, Ubuntu 8.04. Теперь, когда вы во всём определились, переходим непосредственно к процессу настройки.
ШАГ 1: установка драйверов для видеокарт Перед тем, как устанавливать драйвера, важно знать ещё несколько тонкостей: 1) для видеокарт GeForce нужно устанавливать только проприетарные драйвера, свободные драйве ра с мультиситом работать не будут; 2) для мультиситов на Xorg для видеокарт Radeon можно использовать как проприетарные драйве ра "fglrx", так и свободные драйвера "radeon; в первую очередь рекомендую свободные драйвера, но в этом случае придётся править файл xorg.conf ручками, или воспользоваться дополнительными утилитами, о которых будет сказано ниже; если же компьютер планируется в качестве игрового, тогда необходимо устанавливать проприетарные драйвера; 3) проприетарные драйвера для видеокарт GeForce и Radeon имеются в репозиториях большинства дистрибутивов, однако при их использовании могут возникнуть некоторые проблемы с интегриро ванными видеокартами, поэтому я предпочитаю использовать драйвера с официальных сайтов; но есть другая сторона медали: при обновлении ядра системы их надо переустанавливать заново; 4) для интегрированных видеокарт Intel желательно использовать свободный драйвер "intel", в слу чае, если с ним возникают проблемы, можно использовать драйвер "vesa"; 5) если вы настраиваете мультисит с интегрированной видеокартой, то очень важно, чтобы она была ведущей, поэтому в BIOS'е необходимо для параметра Init Display First выставить значение "Onboard"; в том случае, если при старте мультисита возникают проблемы, попробуйте сделать ве дущей внешнюю видеокарту. Ниже будет описано, как правильно установить официальные драйвера для видеокарт GeForce и Radeon.
Установка драйверов ATI Radeon Особых проблем с установкой драйверов для видеокарт Radeon не возникает. Сначала скачива ем драйвер с официального сайта: http://support.amd.com/us/gpudownload/linux/Pages/radeon_linux.aspx Установочный файл atidriverinstaller
Установка драйверов NVIDIA GeForce Источник: http://forum.ubuntu.ru/index.php?topic=3031.0 http://forum.ubuntu.ru/index.php?topic=15968 http://www.linuxspace.org/archives/2676 Драйвера для видеокарт GeForce устанавливаются довольно сложно, и если чтото сделано не правильно, они могут и не запуститься. Чтобы у вас не возникло с ними проблем, строго следуйте инструкции ниже. Итак, скачиваем последнюю версию драйверов для своей видеокарты с официальных сайтов: http://www.nvidia.ru/Download/index.aspx?lang=ru http://www.nvidia.com/Download/index5.aspx?lang=enus Установочный файл будет называться NVIDIALinuxx86
Section "ServerLayout" Identifier "seat2" # Inputdevice "Keyboard1" "CoreKeyboard" # Inputdevice "Mouse1" "CorePointer" screen 0 "Screen2" 0 0 EndSection А вот если вы делаете мультисит на Xorg+evdev, то для вас всё только начинается. В файле xorg.conf должны содержаться: 1) секция для каждой клавиатуры и мышки, в которых прописаны параметры и драйвер evdev; 2) секция для каждой видеокарты и монитора; в секциях для видеокарт помимо драйвера обяза тельно должна быть прописана шина, к которой подключена видеокарта; 3) секции экрана "Screen", к каждой из которых привязаны своя видеокарта и монитор (привязка идёт по идентификаторам); 4) секции запуска сеанса Xсервера "ServerLayout", к каждой из которых привязаны свои клавиа тура, мышка и экран; 5) секции с дополнительными параметрами запуска Xсерверов (Section "Module" и Section "ServerFlags"), и для каждой версии Ubuntu нужно прописывать свои параметры, о которых будет сказано ниже. Можно сказать, что часть файла вы можете получить при помощи утилит конфигурирования X сервера, а часть придётся доделывать ручками. Один из вариантов файла xorg.conf представлен в самом конце этой статьи в “Приложении 1”. Теперь пройдёмся по каждому пункту отдельно. В секциях для клавиатур и мышек помимо параметров должны быть прописаны идентификаторы шин, к которым они подключены, это делается в строке Option "Device". Необходимо использовать идентификаторы из каталогов /dev/input/bypath/ или /dev/input/byid/, которые в свою очередь являются симлинками на /dev/input/eventX. Разница между ними такова: идентификаторы из /dev/input/bypath/ привязаны к конкретному порту, и вы сможете применять любую модель кла виатуры и мыши, но они обязательно должны быть подключены к определённому порту USB или PS/2; идентификаторы из /dev/input/byid/ привязываются к имени клавиатур и мышек, и вы може те подключать клавиатуры и мышки в любой порт; но если у вас клавиатуры или мышки одина ковые, то эти идентификаторы применять нельзя. Применять идентификаторы /dev/input/eventX не рекомендую, поскольку они при каждой перезагрузке меняются. Для клавиатур в строке Option "XkbModel" нужно указать "evdev", иначе есть вероятность того, что клавиши могут быть перепутаны. Чтобы было проще определить идентификаторы клавиатур и мышек для каждого рабочего ме ста, можно воспользоваться скриптом, написанный Martijn'ом Bastiaan'ом на Python'е 2.6: wget http://dl.dropbox.com/u/1106740/Multiseat/detectInput.py sudo python detectInput.py После запуска скрипта на каждой клавиатуре и мышке нужно нажимать произвольные кнопки, а скрипт после каждого нажатия будет показывать идентификатор устройства, который затем нужно внести в файл xorg.conf в соответствующие строки. В секциях для видеокарт и мониторов нет ничего сверхъестественного, тем более некоторые за мечания были сказаны выше, поэтому не будет на них останавливаться. Для секций экранов будет одно небольшое замечание: если вам необходимо жёстко установить максимальное разрешение экрана, например 1280x1024, для этого в нужную секцию "Screen" добав ляем субсекцию "Display" со следующими параметрами: SubSection "Display" Depth 24 Virtual 1280 1024 Modes "1280x1024@75" EndSubSection Параметр Depth – это глубина цветности в битах (в данном случае 24 бита), Modes – режимы ра боты, поддерживаемые монитором, Virtual – нужное разрешение экрана. Как было уже сказано, в каждой секции "ServerLayout" должны быть прописаны клавиатура, мышка и экран. Как это делается, показано в примере в “Приложении 1”. Если к какомулибо ме сту необходимо подключить вторую клавиатуру или мышку, либо задействовать кнопки мультимедийной клавиатуры (такие клавиатуры в системе распознаются как две разные), то это де лается так: создаётся ещё одна секция для клавиатуры или мышки, а в нужную секцию "ServerLayout" добавляется строка Inputdevice "Keyboard1.1" "AlwaysCore" Идентификатор Keyboard1.1 соответственно меняем на свой. Для мышек строка прописывается по аналогии. Более подробно можно посмотреть здесь: http://www.gentoowiki.info/HOWTO_Multiseat_X Довольно оригинальную идею предложил Martijn Bastiaan в своём блоге: для каждого места ис пользовать свой файл xorg.conf. Суть идеи заключается в следующем: в каталоге /etc создаём ката лог с именем /xorg.conf.d_ms, а в нём в свою очередь создаём файл с именем seat1.conf, в котором прописываем следующее содержимое, поставляя вместо xxxx свои идентификаторы клавиатур, мы шек, драйверы и шины видеокарт: Section "ServerLayout" Identifier "seat0" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
Section "Files" ModulePath "/usr/lib/xorg/modules" FontPath "/usr/share/fonts/X11/misc" FontPath "/usr/share/fonts/X11/cyrillic" FontPath "/usr/share/fonts/X11/100dpi/:unscaled" FontPath "/usr/share/fonts/X11/75dpi/:unscaled" FontPath "/usr/share/fonts/X11/Type1" FontPath "/usr/share/fonts/X11/100dpi" FontPath "/usr/share/fonts/X11/75dpi" FontPath "/var/lib/defoma/xttcidfontconf.d/dirs/TrueType" FontPath "builtins" EndSection
Section "Module" Load "record" Load "dri" Load "dri2" Load "dbe" Load "extmod" Load "glx" EndSection
Section "InputDevice" Identifier "Keyboard0" Driver "evdev" Option "Device" "/dev/input/bypath/XXXXXXXXXX" Option "XkbRules" "xorg" Option "XkbModel" "evdev" Option "XkbLayout" "us,ru" Option "XkbVariant" ",winkeys" Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll" EndSection
Section "InputDevice" Identifier "Mouse0" Driver "evdev" Option "Protocol" "ImPS/2" Option "Device" "/dev/input/bypath/XXXXXXXXXX" Option "GrabDevice" "on" Option "ZAxisMapping" "4 5 6 7" EndSection
Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" EndSection
Section "Device" Identifier "Card0" Driver "XXXXXXXXXX" BusID "PCI:XXXXXXXXXX" # Option "AccelMethod" "UXA" #для видеокарт Intel EndSection
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Viewport 0 0 Depth 24 EndSubSection EndSection
Section "ServerFlags" Option "AutoEnableDevices" "false" Option "AutoAddDevices" "false" Option "AllowEmptyInput" "false" Option "Xinerama" "off" Option "BlankTime" "0" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "0" EndSection Затем в этом же каталоге создаём файл seat2.conf, прописываем то же самое содержимое, меняя только идентификаторы seatX, ScreenX, MouseX, KeyboardX, CardX и MonitorX, (вместо X подставляем порядковый номер, например, для первого места – 0, для второго – 1), и так для каж дого места. А при конфигурировании менеджера загрузок (GDM или KDM) в команде запуска X сервера подставляем каждому месту свой конфигфайл при помощи ключа config /etc/xorg.conf.d/seat0.conf (для второго места надо соответственно прописать seat1.conf, для третьего – seat2.conf и т.д.). Достоинством данного метода является возможность управлять параметрами запуска каждого Xсервера отдельно. Особенно это важно, если у нас в мультисите используются разные видеокар ты, когда для каждой карты необходимо загружать свои модули. Теперь о дополнительных параметрах, без которых мультисит в некоторых версиях Ubuntu мо жет заработать некорректно. Например, для Ubuntu 9.04 и выше в секцию "ServerFlags" (либо в каждую секцию "ServerLayout") нужно добавить следующие строки: Option "DefaultServerLayout" "seat0" #по умолчанию загружается конфигурация сервера seat0 Option "AutoEnableDevices" "false" #запрещаем автоматическое конфигурирование устройств Option "AutoAddDevices" "false" #запрещаем добавлять устройства автоматически, использовать только из xorg.conf Option "AllowEmptyInput" "false" #запрещаем добавлять стандартные драйвера для мышки и клавиатуры В каждую секцию с мышками необходимо добавить строку: Option "GrabDevice" "on" #опция захватывает все события с устройства в монопольное пользование Более подробно о всех тонкостях настройки мультисита для Ubuntu можно прочитать здесь: https://help.ubuntu.com/community/MultiseatX Когда редактирование файла xorg.conf закончено, переходим к следующему шагу.
ШАГ 4: установка необходимых программ и создание скриптов В данном разделе рассматривается процесс установки необходимых программ и скриптов для мультиситов на основе Xephyr и XGL, а также настроек с применением дополнительной программы Xevdevserver. Если вы настраиваете мультисит на основе Xorg'а с применением драйверов evdev, то этот шаг можете пропустить.
Установка XEPHYR Сама утилита устанавливается просто, для этого достаточно набрать команду sudo aptget install xserverxephyr xserverxorginputevdev В других дистрибутивах пакет установки Xephyr'а будет иметь другое наименование, но вы его легко найдёте в репозитории для своей системы через поиск. Для того, чтобы привязать к каждому рабочему месту свою пару клавиатуры/мыши, вы можете воспользоваться одним из двух вариантов: 1) использовать дополнительную программу Xevdevserver; о том, откуда её взять и правильно уста новить, будет сказано ниже; 2) использовать драйвер evdev и скрипт Xephyr.sh, и в этом случае никаких дополнительных про грамм не понадобится. Я рекомендую воспользоваться вторым вариантом, так как он проще, и только в том случае, если у вас с ним возникнут проблемы, применяйте первый. Начиная с версии Ubuntu 8.04, Xephyr под держивает драйвер evdev по умолчанию, в более ранних версиях придётся накладывать на исходни ки специальный патч, который включает эту поддержку. Итак, делаем следующее: в каталоге /usr/sbin/ создаём скрипт с именем Xephyr.sh и делаем его исполняемым: sudo gedit /usr/sbin/Xephyr.sh sudo chmod 755 /usr/sbin/Xephyr.sh Мой вариант этого скрипта выглядит так: #!/bin/bash trap "" usr1
XEPHYR=/usr/bin/Xephyr args=() while [ ! z "$1" ]; do if [[ "$1" == "xauthority" ]]; then shift if [ ! z "$1" ]; then export XAUTHORITY="$1" fi elif [[ "$1" == "display" ]]; then shift if [ ! z "$1" ]; then export DISPLAY="$1" fi elif [[ "$1" == "keyboard" ]]; then shift if [ ! z "$1" ]; then args=("${args[@]}" "keybd") args=("${args[@]}" "evdev,,device=/dev/input/bypath/$1,xkbrules=xorg,xkbmodel=evdev,xkblayout=us") fi elif [[ "$1" == "mouse" ]]; then shift if [ ! z "$1" ]; then args=("${args[@]}" "mouse") args=("${args[@]}" "evdev,,device=/dev/input/bypath/$1") fi else if ! expr match $1 'vt[09][09]*' >/dev/null; then args=("${args[@]}" "$1") fi fi shift done echo $XEPHYR "${args[@]}" >> /tmp/logXephyr exec $XEPHYR "${args[@]}" Данный скрипт я подсмотрел здесь: http://netpatia.blogspot.com/2006/09/multiseatcomputerwithubuntu.html Я решил применить скрипт из описания для Ubuntu 6.06, поскольку в описаниях для систем 8.04 и 9.04 мультисит настраивается только на 2 рабочих места и при помощи двух скриптов (для большего количества мониторов придётся редактировать эти скрипты, что не каждому под силу); в данном случае вся настройка строится на одном скрипте, который позволяет разделить систему на любое количество мониторов без дополнительных плясок с бубном. Скрипт был немного модифи цирован с учётом особенностей систем Ubuntu 8.04 и выше. Теперь для дальнейших настроек переходим к шагу 4.
Установка XGL В отличии от Xephyr сервер XGL не поддерживает по умолчанию драйвер evdev, поэтому вам в любом случае придётся использовать программу Xevdevserver, о которой будет сказано ниже. В Ubuntu 7.10 и 8.04 сервер XGL устанавливается следующим образом: sudo aptget install xserverxgl dbusx11 xserverxorginputevdev После установки нужно удалить файл /etc/X11/Xsession.d/98xserverxgl_startserver, чтобы нам XGL не мешался, когда он не нужен. Также можно создать файл с именем ~/.config/xserver xgl/disable в домашнем каталоге каждого пользователя. В репозиториях новых версий Ubuntu 8.10 и 9.04 пакет xserverxgl отсутствует. Также отсут ствуют некоторые пакеты, необходимые для компиляции XGL из исходников. Я пробовал в Ubuntu 9.04 установить пакет от 8.04, и вроде всё заработало, но возникли досадные проблемы с клавиату рой: индикатор раскладок напрочь отказался работать, а некоторые клавиши оказались перепутаны, и увы, никакие пляски с бубном не помогли. Но наряду с DEBпакетами в репозиториях есть ис ходники, поэтому если кому интересно, можно собрать Xgl конкретно под свой дистрибутив: http://mirror.yandex.ru/ubuntu/pool/universe/x/xserverxgl/ Необходимо скачивать версию 1.1.99.1 (более старая, которая обозначена как 7.0.0, с мультиси том не работает). Обязательно вместе с исходником *.orig.tar.gz скачайте файлы *.diff.gz и *.dsc, в них содержатся все необходимые данные для компиляции. Эти же файлы можно скачать с сайта: https://launchpad.net/xserverxgl. В крайнем случае можно скачать с официальных CVSрепозиториев и собрать. Вот некоторые инструкции по установке XGL из CVS: http://freedesktop.org/wiki/Software/Xgl http://www.xakep.ru/magazine/xa/091/108/1.asp Также исходники всегда доступны здесь: http://webcvs.freedesktop.org/xorg/xserver/xorg/hw/xgl/
Установка XEVDEVSERVER Хотя эта утилита была написана специально для сервера XGL, она также может успешно приме няться в мультиситах на основе Xephyr и Xorg. Для компиляции Xevdevserver'а нужно установить следующие пакеты: sudo aptget install libx11dev libxtstdev gizmod libncurses5dev build essential Теперь скачиваем необходимые файлы: wget http://research.edm.uhasselt.be/~jori/page/uploads/Misc/XglScript.sh wget http://research.edm.uhasselt.be/~jori/page/uploads/Misc/XevdevScript.sh wget http://research.edm.uhasselt.be/~jori/page/uploads/Misc/startsched.c wget http://research.edm.uhasselt.be/jori/errut/errut1.0.0.tar.gz wget http://research.edm.uhasselt.be/~jori/page/uploads/Misc/xevdevserver2.0.0.tar.gz Редактируем скачанные скрипты. Если вы устанавливали XGL из исходников, то ничего редактировать не надо, а если из пакетов (DEB или RPM), то редактируем скрипт XglScript.sh: в 14 й строке XGLCOMMAND вместо пути /opt/Xgl/bin/Xgl прописываем истинный путь к исполняемому файлу XGLсервера: /usr/bin/Xgl. Обязательно проверьте наличие остальных файлов в путях, которые прописаны в других стро ках, и в случае необходимости измените их. Если вы используете видеокарту GeForce, то проверьте наличие файла /usr/lib/libGL.so, и если у вас вместо него будет другой libGL.so.1 (который в свою очередь будет являться симлинком на файл драйвера libGL.so.
Настройка GDM версий 2.20 и ниже. Есть два пути конфигурирования: редактировать либо основной файл /etc/gdm/gdm.conf, либо дополнительный файл /etc/gdm/gdm.confcustom (в некоторых дистрибутивах эти файлы называ ются соответственно /usr/share/gdm/defaults.conf и /etc/gdm/custom.conf). Во втором случае конфигурирование можно частично выполнить через графическую оболочку, войдя в меню "Администрирование → Окно входа в систему". При этом на всякий случай нужно включить запись логов событий, прописав в секцию [daemon] строку LogDir=/var/log/gdm В первом же случае все логи будут прописываться в каталоге /var/log/gdm, но мы лишаемся воз можности конфигурирования через графическую оболочку, все выполняется только ручками с ис пользованием текстового редактора. Если вы решили выбрать первый путь (редактировать файл gdm.conf), то для начала нужно из ка талога /etc/gdm/ убрать файлы gdm.confcustom и gdm.conforig. Их можно переименовать, перене сти в другое место, наконец просто грохнуть (если не жалко). Также нужно раскомментировать строку Greeter=/usr/lib/gdm/gdmgreeter в секции [daemon] Но я всётаки рекомендую редактировать дополнительный файл gdm.confcustom, так как при этом основной файл gdm.conf остаётся нетронутым, что очень важно в случае "падения" иксов. Во всех случаях настройка GDM сводится к следующему: в секции [servers] прописываются идентификаторы всех Xсерверов и порядок их старта, а далее создаются секции отдельно для каж дого Xсервера, в которых описываются необходимые параметры работы. Для мультиситов на XGL или Xephyr с применением утилиты Xevdevserver перед тем, как делать какиелибо исправления, надо сначала определить идентификаторы наших клавиатур и мышек. Для этого смотрим содержимое файла: cat /proc/bus/input/devices и определяем, на каких шинах подключены именно наши клавиатуры и мышки, посмотрев их иден тификаторы eventX (где X — идентификатор, который можно узнать в строках H:Handlers). В моём случае клавиатуры имели идентификаторы event1 и event3, мыши – event2 и event5. Но идентификаторы eventX при каждой перезагрузке могут изменяться без "оглядки" на преды дущие конфигурации. Поэтому вместо этих идентификаторов желательно использовать любые дру гие, которые прописаны в файле /proc/bus/input/devices в секции для ваших устройств. Например, вы можете из строки использовать идентификатор usb0000:00:03.01/input0 из строки P:Phys, или "Microsoft 3Button Mouse with IntelliEye(TM)" из строки N:Name и даже идентификатор inputX из строки S:Sysfs и т.д. Если у вас используются одинаковые мыши и клавиатуры, то имена N:Name в качестве идентификаторов лучше не использовать. Также можно использовать идентификаторы из каталогов /dev/input/bypath/ (в этом случае привязка будет по порту, куда подключена клавиатура или мышь) или /dev/input/byid/ (привязка будет по имени устройства), которые в свою очередь являются симлинками на eventX и будут оставаться всегда постоянными. Итак, открываем редактируемый файл и в секции [daemon] прописываем (либо ищем эту строку и раскомментируем её): AlwaysRestartServer=true Теперь есть два варианта конфигурирования. Вариант №1: первым стартует основной Xсервер, а поверх него – два сеанса Xgl+Xevdevserver. Сначала несколько замечаний: 1) в приведённом ниже конфиге в обеих секциях [serverXgl*] строка command=… и следующая строка – это одна команда, которая должна быть написана в одну строку через пробел. Поскольку команда очень длинная, она не вместилась в данном описании в одну строку целиком, пришлось разбить на две. 2) для видеокарт Radeon в секциях [serverXgl*] строках command вместо параметра accel glx:pbuffer accel xv:fbo для большей совместимости нужно указать другой параметр: accel glx:pbuffer accel xv:pbuffer. То же самое относится и ко второму варианту конфигурации. 3) некоторые программы используют аппаратный курсор вместо программного, и только один поль зователь в этом случае может использовать такие программы. У второго пользователя аппаратный курсор отключается параметром softcursor в строке command секции [serverXgl1]. Если планиру ется делать 3 и более рабочих мест, то этот параметр нужно прописать и для всех мест, кроме од ного, которое стартует на дисплее :0.0; 4) вместо сервера X можно использовать сервер Xorg (как это было сделано в оригинале), в этом случае в секции [servers] строке 0=Standard нужно удалить параметр device=/dev/console, а в секции [serverStandard] в строке command прописать /usr/bin/Xorg. Как было сказано выше, в этом случае скрипт XevdevScript.sh в редактировании не нуждается. Более того: в приведенном ниже варианте этот скрипт не задействован, так что в данном случае его можно вообще удалить, но я рекомендую всетаки его оставить. Итак, для мультисита на XGL+Xevdevserver участок файла gdm.confcustom будет таким: [servers] 0=Standard device=/dev/console 1=Xgl1 2=Xgl2
[serverStandard] name=Standard server command=/usr/bin/X br audit 0 handled=false flexible=false
[serverXgl1] name=Xgl1 command=/usr/local/sbin/XglScript.sh display :0.1 keyboard isa0060/serio0/input0 mouse isa0060/serio1/input0 dpi 86 fullscreen ac accel glx:pbuffer accel xv:fbo xkbmap us softcursor handled=true flexible=false
[serverXgl2] name=Xgl2 command=/usr/local/sbin/XglScript.sh display :0.0 keyboard usb0000:00:1d.22/input0 mouse usb0000:00:1d.21/input0 dpi 86 fullscreen ac accel glx:pbuffer accel xv:fbo xkbmap us handled=true flexible=false Для мультисита на Xephyr+Xevdevserver этот участок будет таким же, только в cтроках command параметры softcursor и accel glx:pbuffer accel xv:pbuffer прописывать не нужно, а сами строки будут выглядеть так: command=/usr/local/sbin/XephyrScript.sh display :0.1 keyboard isa0060/serio0/input0 mouse isa0060/serio1/input0 fullscreen ac dpi 86 xkbmap us Примечание: в случае с Xnest строки будут такими: command=/usr/local/sbin/XnestScript.sh display :0.1 keyboard isa0060/serio0/input0 mouse isa0060/serio1/input0 geometry 1024x768+0+0 dpi 92 xkbmap us Xephyr в отличие от XGL "понимает" только 3 идентификатора: eventX (или симлинки на него из каталогов /dev/input/bypath/ и /dev/input/byid/), S:Sysfs и P:Phys. С последними двумя Xephyr из начально "не знаком", в других конфигурациях для этого нужен отдельный скрипт, который преоб разует eventX в P:Phys и затем привязывает один к другому. В нашем случае благодаря Xevdevser ver таких манипуляций не требуется. Для варианта Xephyr+evdev, в котором вместо Xevdevserver'а применяется скрипт Xephyr.sh, нужно использовать только идентификаторы из каталога /dev/input/bypath/. Строки command в этом случае будут такими: command=/usr/sbin/Xephyr.sh display :0.0 xauthority /var/lib/gdm/:0.Xauth fullscreen keyboard platformi8042serio0eventkbd mouse platformi8042serio1eventmouse Вариант №2: Xevdevserver и XGLсеансы стартуют перед основным Xсервером, таким образом они получат управление устройствами сразу. Важное замечание: в этом конфиге не желательно использовать данные из строк N:Name в каче стве идентификаторов клавиатур и мышек. Также заметьте, что в отличии от предыдущего в этом варианте уже задействован скрипт XevdevScript.sh. [servers] 0=Standard 1=Xgl1 2=Xgl2
[serverStandard] name=Standard server command=/usr/local/sbin/XevdevScript.sh xevdev ":1,isa0060/serio0/input0,isa0060/serio1/input0" xevdev ":2,usb0000:00:1d.22/input0,usb 0000:00:1d.21/input0" handled=false flexible=false
[serverXgl1] name=Xgl1 command=/usr/local/sbin/XglScript.sh display :0.1 dpi 86 fullscreen ac accel glx:pbuffer accel xv:fbo xkbmap us softcursor handled=true flexible=false
[serverXgl2] name=Xgl2 command=/usr/local/sbin/XglScript.sh display :0.0 dpi 86 fullscreen ac accel glx:pbuffer accel xv:fbo xkbmap us handled=true flexible=false Запись xevdev ":1,isa0060/serio0/input0,isa0060/serio1/input0" в секции [serverStandard] означает, что все сигналы, поступающие с клавиатуры с идентификатором isa0060/serio0/input0 и мыши isa0060/serio1/input0 будут переадресованы на дисплей :1. Ну а как в данном варианте правильно прописать строки command для варианта Xephyr+Xevdev server, я думаю, вы догадаетесь сами. Для Xephyr+evdev этот вариант применить нельзя. Если вы настраиваете самый популярный вариант мультисита Xorg+evdev, то участок файла, где прописываются Xсерверы, будет выглядеть так: [servers] 0=Standard1 1=Standard2
[serverStandard1] name=Standard1 command=/usr/bin/X :0 br audit 0 layout seat1 isolateDevice PCI:0:2:0 nolisten tcp novtswitch sharevts handled=true flexible=false
[serverStandard2] name=Standard2 command=/usr/bin/X :1 br audit 0 layout seat2 isolateDevice PCI:2:0:0 nolisten tcp novtswitch sharevts handled=true flexible=false Объяснения: а) :0 и :1 — это порядковые номера дисплеев, на которых будет стартовать свой сеанс Xсервера; нумерация начинается с нуля; б) в параметре layout нужно прописать идентификатор нашего Xсервера, который берётся из фай ла xorg.conf секции [ServerLayout]; в) в параметре isolateDevice прописываем идентификатор шины PCI, к которой подключена каждая видеокарта; посмотреть этот параметр можно либо в файле xorg.conf в секции [Device], либо в кон соли, набрав команду lspci | grep VGA и прописав его в том виде, как показано в примере выше; г) параметр sharevts желательно указывать для каждого Xсервера, в этом случае будет корректно работать рестарт иксов для каждого рабочего места; если чтото заработает некорректно, напри мер, первое место не загрузится, а остальные загрузятся нормально, то попробуйте не указывать этот параметр для первого Xсервера X:0 (если мультисит сделан с интегрированной видеокартой, то как правило этот Хсервер стартует на ней); д) параметры nolisten tcp (запрещает Xсерверу слушать порт 6000) и novtswitch (запрещает ис пользование виртуальных консолей) можно не указывать (лично у меня и без них всё прекрасно ра ботало). Для мультисита на Xorg+Xevdevserver строки command будут выглядеть так: command=/usr/local/sbin/XorgScript.sh layout seat1 display :0 keyboard usb0000:00:1d.22/input0 mouse usb0000:00:1d.21/input0 isolateDevice PCI:0:2:0 sharevts nolisten tcp novtswitch xkbmap us Соответственно для каждой секции [serverStandard*] в этой строке необходимо прописать свои парамет ры. Как правильно прописать параметры display, keyboard и mouse, было сказано выше.
Настройка GDM версий 2.30 и выше. ВНИМАНИЕ! Мультисит с применением GDM 2.30 мною до конца ещё не отработан и пока существуют некоторые проблемы с его запуском, поэтому применять его на практике пока что не рекомендую! Данный раздел подготовлен по материалам сайта http://multiseatonlinux.blogspot.com/ Здесь рассматривается мультисит на Xorg+evdev в связке с GDM 2.30, который идёт в Ubuntu 10.04. Мультиситы на основе Xephyr я пока ещё не отрабатывал, поэтому описание для них будет сделано позже. Итак, как было сказано выше, GDM последних версий (на момент написания раздела это была версия 2.30) не поддерживает мультисит по умолчанию. Хотя, как обещают разработчики, в версии 2.32 этот недостаток будет устранён. Для включения поддержки мультисита необходимо пропат чить GDM и ConsoleKit, либо установить уже пропатченные версии. Нам необходимы пакеты consolekit, gdm, libckconnector0, libckconnectordev и libpamckconnec tor. Скачать пропатченные версии этих пакетов можно с сайта https://launchpad.net/~hmb1/+archive/multiseat либо воспользоваться командами: mkdir ~/multiseat && cd ~/multiseat wget "http://dl.dropbox.com/u/1106740/Multiseat/`uname a | grep o 86[0 9_]*`" q O download wget i download; rm download Во втором случае все нужные пакеты будут скачаны автоматически под вашу архитектуру. Эти пакеты имеют более старую версию, чем пакеты в репозиториях Ubuntu, поэтому устанавли вать их надо обязательно при помощи команды dpkg i. Если же у вас все пакеты находятся в од ном каталоге, их можно установить одной командой dpkg i Чтобы в дальнейшем система не пыталась обновить эти пакеты, нужно заблокировать их обнов ление: echo consolekit hold | dpkg setselections echo gdm hold | dpkg setselections echo libckconnector0 hold | dpkg setselections echo libckconnector0dev hold | dpkg setselections echo libpamckconnector hold | dpkg setselections echo libckconnectordev hold | dpkg setselections Можно также самостоятельно наложить патчи на исходники GDM и ConsoleKit из репозиториев. Скачиваем и распаковываем патчи: wget http://dl.dropbox.com/u/1106740/Multiseat/gdm2.30.0.tar.lzma wget http://dl.dropbox.com/u/1106740/Multiseat/consolekit0.4.1.tar.lzma unlzma gdm2.30.0.tar.lzma && unlzma consolekit0.4.1.tar.lzma tar xf gdm2.30.0.tar && tar xf consolekit0.4.1.tar Скачиваем исходники и устанавливаем необходимые пакеты: sudo aptget builddep gdm consolekit sudo aptget install gnomecommon dpkgdev autogen fakeroot Компилируем GDM: CFLAGS="g O2 g Wall O2" CXXFLAGS="g O2 g Wall O2" CPPFLAGS="" LDFLAGS="Wl,Bsymbolicfunctions" ./autogen.sh build=i486linuxgnu prefix=/usr includedir="\${prefix}/include" mandir="\$ {prefix}/share/man" infodir="\${prefix}/share/info" sysconfdir=/etc localstatedir=/var libexecdir="\${prefix}/lib/gdm" disablemaintainer mode disabledependencytracking disablesilentrules srcdir=. disablescrollkeeper withatspiregistryddirectory=/usr/lib/atspi enableipv6=yes withincompletelocales withselinux sudo dpkgbuildpackage Компилируем ConsoleKit: CFLAGS="g O2 g Wall O2" CXXFLAGS="g O2 g Wall O2" CPPFLAGS="" LDFLAGS="Wl,Bsymbolicfunctions" ./autogen.sh build=i486linuxgnu prefix=/usr includedir="\${prefix}/include" mandir="\$ {prefix}/share/man" infodir="\${prefix}/share/info" sysconfdir=/etc localstatedir=/var libexecdir="\$(prefix)/lib/ConsoleKit" disable maintainermode disabledependencytracking disablesilentrules srcdir=. enablepammodule enabledocbookdocs withpid file=/var/run/consolekitdaemon.pid sudo dpkgbuildpackage Когда всё готово, приступим непосредственно к настройке. В каталоге /etc/ConsoleKit/seats.d создаём файл с именем 01seat1.seat: sudo gedit /etc/ConsoleKit/seats.d/01seat1.seat и наполняем его следующим содержимым: [Seat Entry] Version=1.0 Name=Seat1 ID=Seat1 Description=Seat 1 Hidden=false Devices= Sessions=Seat1; Таким же образом создаём второй файл 02seat2.seat и прописываем в него то же самое с по правкой на второе место. Точно также делаем и для всех остальных мест (если их будет больше двух). После проделанных действий редактируем файл /etc/ConsoleKit/seats.d/00primary.seat, из менив строку Hidden=false на Hidden=true. Теперь переходим в каталог /etc/ConsoleKit/sessions.d и создаём в нём файл с именем Seat1.ses sion: sudo gedit /etc/ConsoleKit/sessions.d/Seat1.session Прописываем в него следующее: [Session Entry] Name=Local Type=LoginWindow Description=Local Login Screen DisplayTemplate=Seat1 [Local] display=:0 vt=vt1 Повторяем то же самое для всех остальных мест. И наконец переходим в каталог /etc/ConsoleKit/displays.d и создаём в нём файл с именем Seat1.display: sudo gedit /etc/ConsoleKit/displays.d/Seat1.display и прописываем в него: [Display] Type=X11 [X11] Exec=/usr/bin/X $display layout seat0 isolateDevice PCI:0:2:0 sharevts nr verbose auth $auth nolisten tcp $vt Повторяем то же самое для каждого места. Обратите внимание на ключ sharevts, о применении которого было сказано выше (в пункте про GDM 2.20)! И напоследок удаляем временные файлы, чтобы они нам не мешались: find /etc/ConsoleKit name *~ | xargs rm f Перезагружаемся и любуемся!
Настройка KDM. В этом разделе будет рассмотрен процесс настройки мультисита на Xorg и Xephyr при помощи менеджера загрузок KDM, который как правило идёт в комплекте с рабочей оболочкой KDE. Если вы используете Ubuntu или другой дистрибутив, основанный не на KDE, то сначала необходимо установить KDM: sudo aptget install kdm Во время установки необходимо выбрать менеджером по умолчанию KDM, либо это можно сде лать после установки, изменив в файле /etc/X11/defaultdisplaymanager имеющуюся строку на /usr/bin/kdm При настройке мультисита на Xorg+evdev для запуска каждого рабочего места необходимо про писать следующие настройки в файле /etc/kde4/kdm/kdmrc (в других дистрибутивах этот файл мо жет располагаться в /etc/X11/kdm/kdmrc): … [General] # Здесь рассматривается конфиг на 2 рабочих места # Если рабочих мест будет больше, добавляем их через запятую в строку StaticServers, # не забыв при этом удалить их из ReserveServers StaticServers=:0,:1 ReserveServers=:2,:3,:4,:5 ...
[X:0Core] # Если нужен автологин, раскомментируйте все строки #AutoLoginEnable=true # Автологин после рестарта рабочего места #AutoLoginAgain=false #AutoLoginDelay=0 #AutoLoginLocked=false #AutoLoginUser=USERNAME #AutoLoginPass=PASSWORD ClientLogFile=.xsessionerrors # Для запуска рабочего места можно использовать любую из двух строк ниже ServerCmd=/usr/bin/X :0 br audit 0 layout seat1 isolateDevice PCI:1:5:0 nolisten tcp novtswitch sharevts vt7 #ServerArgsLocal=br autit 0 layout seat1 isolateDevice PCI:1:5:0 nolisten tcp novtswitch sharevts vt7
[X:1Core] #AutoLoginEnable=true #AutoLoginAgain=true #AutoLoginDelay=0 #AutoLoginLocked=false #AutoLoginUser=USERNAME #AutoLoginPass=PASSWORD ClientLogFile=.xsessionerrors ServerCmd=/usr/bin/X :1 br audit 0 layout seat0 isolateDevice PCI:2:0:0 nolisten tcp novtswitch sharevts vt9 #ServerArgsLocal=br autit 0 layout seat0 isolateDevice PCI:2:0:0 nolisten tcp novtswitch sharevts vt9 Обратите внимание: если у вас не будет загружаться первое место [X:0Core] (которое как правило стартует на интегрированной видеокарте), а все остальные запустятся нормально, тогда необходимо убрать ключ sharevts из строки запуска Xсервера для этого места! Ключи с номерами виртуальных терминалов указывать не обязательно, поскольку при старте си стемы первое место окажется на терминале 7, второе – на произвольном. Но если чтото работает некорректно, тогда попробуйте прописать эти ключи, привязав места к другим терминалам. ВНИМАНИЕ! Приведённый ниже метод – пока что только наброски, на практике он ещё мною не отрабатывался! Для настройки мультисита на Xephyr+evdev необходимо установить дополнительную программу runit: sudo aptget install runit Поскольку KDM по умолчанию не может запускать вложенные сеансы на одном экране, как в GDM 2.20, то эта программа позволяет остановить сеанс KDM, затем запустить Xсервер, а уже по верх него запустить сеансы Xephyr. Данный метод был подсмотрен здесь: http://theor.jinr.ru/~varg/web/linux/multihead/ Итак, после установки программы в каталоге /etc/sv/ создаём ещё два: xserverhw и kdm xephyr, в каталоге /etc/sv/xserverhw создаём файл run: sudo gedit /etc/sv/xserverhw/run Копируем в этот файл следующее содержимое: #!/bin/sh sv stop kdm exec /usr/bin/X :0 vt7 config /etc/X11/xorg.conf dpi 96 nolisten tcp Теперь в каталоге /etc/sv/kdmxephyr также создаём файл run: sudo gedit /etc/sv/kdmxephyr/run Наполняем файл следующим содержимым: #!/bin/sh set e # need running NSS to be actually useful sv start nscd # we need the hardware X server to be actually useful sv start xserverhw exec 2>&1 exec /usr/bin/kdm config /etc/kde4/kdm/kdmrc nodaemon error /dev/stderr Делаем оба скрипта исполняемыми: chmod R 755 /etc/sv/xserverhw/run chmod R 755 /etc/sv/kdmxephyr/run Теперь правим файл /etc/kde4/kdm/kdmrc по аналогии, как приведено выше, только строки за пуска Xсервера будут иметь вид: ServerCmd=/usr/sbin/Xephyr.sh v :1 display :0 vt7 p 5 fullscreen keyboard platformi8042serio0eventkbd mouse platformi8042serio1 eventmouse Соответственно для второго места будет ключ v :2, а также изменятся ключи keyboard и mouse. После проделанных манипуляций перезагружаемся.
ПОСЛЕДНЯЯ СТАДИЯ: «ДОПИЛИВАЕМ» СИСТЕМУ Когда вы настроите мультисит, считайте, что на три четверти вы дело сделали. Однако для пол ноты счастья нужно немного "поработать напильником". 1) Если после полной настройки системы на рабочих местах не работает автоповтор с клавиатуры какихлибо клавиш, то каждому пользователю в ~/.bashrc надо добавить строку xset r on В Ubuntu 9.04 после настройки мультисита не работал автоповтор клавиш «влево» и «вниз»; если совет выше не помогает, то в ~/.bashrc прописываем строку xset r 113; xset r 116 2) Под профилем каждого пользователя в меню Система → Параметры → Управление питани ем (программа gnomepowerpreferences) во вкладках "При питании от сети" и "От бата реи" в параметрах "Приостанавливать компьютер через" и "Отключать дисплей через" ползун ки поставить в максимальное положение "Никогда". 3) В мультиситах на Xorg и Xephyr с драйвером evdev у клавиатур могут быть перепутаны клавиши (в частности у меня вместо клавиш «вверх» срабатывал PrintScreen на обоих местах); в GNOME эта проблема решается просто: под профилем каждого пользователя открываем Параметры → Кла виатура → вкладка «Раскладки», в строке "Модель" нужно указать "Evdevmanaged keyboard" (или "Клавиатура, управляемая драйвером evdev"), а затем открыть Параметры → Комбинации клавиш клавиатуры, найти действие «Получить снимок экрана» и вместо клавиши Print указать другую комбинацию клавиш, например, Ctrl+Print; 4) если совет выше не помогает, то необходимо на уровне системы привязать к каждой неправильно работающей клавише нужное действие; делается это так: запускаем в консоли программу xev, на жимаем неправильно работающую клавишу и записываем на отдельный листок бумаги параметры keycode, keysym и действие, которое в данный момент привязано к клавише; далее открывает файл /usr/share/X11/XKeysymDB, ищем в нём строку с действием, к которому привязана клавиша, и удаляем из этой строки keysymкод клавиши; затем ищем строку с той функцией, которая нам нуж на, и удаляем из неё текущий keysymкод и прописываем код нашей клавиши; теперь при помощи команды xmodmap pke | grep
ЗАКЛЮЧЕНИЕ: В данной статье я попытался рассмотреть все возможные варианты реализации технологии Multi seat в системе Linux и собрать все накопленные материалы воедино, чтобы вам, уважаемые "муль тиситчики", не пришлось бы шарить по всему интернету в поисках ответов на свои вопросы. Но на всякий случай в качестве дополнительных материалов даю ссылки на другие статьи, посвящённые мультиситу. Вполне возможно, вы сможете найти в них чтонибудь полезное для себя. И хотя опи сание "заточено" конкретно под Ubuntu, его можно применить и к другим дистрибутивам Linux. Если вы нашли ошибку в описании, либо можете дополнить какойлибо ценной информацией, пишите на мой электронный адрес, который указан в самом начале. Также вы можете почитать дополнительные материалы: МУЛЬТИСИТ НА XEPHYR/XNEST : http://en.wikibooks.org/wiki/Multiterminal_with_Xephyr http://en.wikibooks.org/wiki/Multiterminal_with_Xnest Самый популярный вариант настройки мультисита на Xephyr: http://netpatia.blogspot.com/2008/02/multiseatcomputerwithubuntu804.html http://netpatia.blogspot.com/2009/06/multiseatinubuntu904.html Описания на русском языке: http://vd.net.ru/Linux/Multiseat http://www.altlinux.org/Multistation http://freesource.info/wiki/AltLinux/Dokumentacija/Multistation Также в конфигурировании мультисита на базе Xephyr'а с драйвером evdev поможет утилита MDM, которую можно найти здесь: http://wiki.c3sl.ufpr.br/multiseat/index.php/Mdm МУЛЬТИСИТ НА X/XORG: http://en.wikibooks.org/wiki/Multiterminal_with_evdev http://cambuca.ldhs.cetuc.pucrio.br/multiuser/ http://linuxgazette.net/124/smith.html http://wpkg.org/Configuring_multiseat_X_workstation Описания на русском языке: http://www.altlinux.org/X11/DualSeat http://www.klv.lg.ua/~vadim/multihead.html Вот ещё два варианта реализации мультисита, которые нынче уже не актуальны, но для общего развития стоит посмотреть: http://en.wikibooks.org/wiki/Multiterminal_with_faketty http://pt.wikibooks.org/wiki/Multiterminais/Multiterminal_com_Ruby
ПРИЛОЖЕНИЕ 1 Вот мой вариант файла xorg.conf для мультисита на Xorg'е с интегрированной видеокартой Intel G31/33 и внешней GeForce 8400GS. Файл был подредактирован, все секции рассортированы по ви дам для большего понимания его структуры: # ======MOUSES======Section "InputDevice" Identifier "Mouse1" Driver "evdev" Option "Protocol""ImPS/2" Option "Device" "/dev/input/bypath/platformi8042serio1eventmouse" Option "GrabDevice" "on" Option "Emulate3Buttons" "no" Option "ZaxisMapping" "4 5" EndSection
Section "InputDevice" Identifier "Mouse2" Driver "evdev" Option "Device" "/dev/input/bypath/pci0000:00:1d.3usb0:2:1.0eventmouse" Option "Protocol""ImPS/2" Option "GrabDevice" "on" Option "Emulate3Buttons" "no" Option "ZaxisMapping" "4 5" EndSection
# ======KEYBOARDS======Section "InputDevice" Identifier "Keyboard1" Driver "evdev" Option "Device" "/dev/input/bypath/pci0000:00:1d.3usb0:1:1.0eventkbd" Option "XkbRules" "xorg" Option "XkbModel" "evdev" Option "XkbLayout" "us,ru" Option "XkbVariant" ",winkeys" Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll" EndSection
Section "InputDevice" Identifier "Keyboard2" Driver "evdev" Option "Device" "/dev/input/bypath/platformi8042serio0eventkbd" Option "XkbRules" "xorg" Option "XkbModel" "evdev" Option "XkbLayout" "us,ru" Option "XkbVariant" ",winkeys" Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll" EndSection
# ======VIDEOCARDS======Section "Device" Identifier "Device1" Boardname "Intel Q35" Busid "PCI:0:2:0" Driver "intel" Screen 0 Vendorname "Intel" EndSection
Section "Device" Identifier "Device2" Boardname "NVIDIA GeForce 8 Series" Busid "PCI:1:0:0" Driver "nvidia" Option "NoLogo" "True" Screen 0 Vendorname "NVIDIA" EndSection
# ======MONITORS======Section "Monitor" Identifier "Monitor1" Vendorname "Acer" Modelname "Acer AL1716X" Horizsync 30.083.0 Vertrefresh 56.075.0 Option "DPMS" EndSection
Section "Monitor" Identifier "Monitor2" Vendorname "Acer" Modelname "Acer AL1716X" Horizsync 30.083.0 Vertrefresh 56.075.0 Option "DPMS" EndSection
# ======SCREENS======Section "Screen" Identifier "Screen1" Device "Device1" Defaultdepth 24 Monitor "Monitor1" SubSection "Display" Depth 24 Virtual 1280 1024 Modes "1280x1024@75" EndSubSection EndSection
Section "Screen" Identifier "Screen2" Device "Device2" DefaultDepth 24 Option "TwinView" "0" Option "metamodes" "1280x1024_75 +0+0" SubSection "Display" Depth 24 EndSubSection EndSection
# ======SERVER LAYOUTS======Section "ServerLayout" Identifier "seat1" Inputdevice "Keyboard1" "CoreKeyboard" # Cтрока ниже позволяет подключить кнопки мультимедийной клавиатуры или добавить вторую клавиатуру # Inputdevice "Keyboard1.1" "AlwaysCore" Inputdevice "Mouse1" "CorePointer" screen 0 "screen1" 0 0 EndSection
Section "ServerLayout" Identifier "seat2" Inputdevice "Keyboard2" "CoreKeyboard" Inputdevice "Mouse2" "CorePointer" screen 0 "screen2" 0 0 EndSection
# ======OPTIONS======Section "Module" Load "glx" Load "GLcore" Load "dri" Load "v4l" EndSection
Section "ServerFlags" Option "DefaultServerLayout" "seat0" Option "AutoEnableDevices" "false" Option "AutoAddDevices" "false" Option "AllowEmptyInput" "false" Option "BlankTime" "false" Option "StandbyTime" "false" Option "SuspendTime" "false" Option "OffTime" "false" EndSection
ПРИЛОЖЕНИЕ 2 Решение, которое позволяет разрулить USBфлэшки между пользователями. Решение взято от сюда: http://forum.lafox.net/index.php?showtopic=19511 За это отдельное спасибо Артуру с форума forum.lafox.net Решение базируется на Ivman + Pmount. В /usr/etc/ivman/IvmConfigActions.xml добавить правила для /dev/sd[ci][14], где sda и sdb — жесткие диски SATA. Поскольку USBустройств великое множество (например мо бильники, где два устройства на шнур). Поэтому лучше написать правила с двухкратным запасом.