Инструкция по настройке Multiseat Поддубный Виталий ООО «Манускрипт Солюшн» г.Тула e­mail: [email protected] 27.12.2008г. Обновлено: 31.07.2011г. ВВЕДЕНИЕ Среди современных офисных компьютеров трудно найти такие, ресурсы которых использова­ лись хотя бы на одну треть. С развитием фирмы как правило возникает потребность в новых рабо­ чих местах, на которые нужно приобретать дополнительные компьютеры. Если Ваш компьютер страдает от избыточной мощности и вы желаете её задействовать, при этом сэкономив до 40% на покупке нового компьютера, эта статья — для Вас. В данной статье рассматривается возможность организации на одном компьютере сразу несколь­ ких рабочих мест. В разных источниках этот способ может называться Multiterminal, Multistation, Multihead, Multiseat и т. д. Мы же для простоты будем называть его последним термином ­ «муль­ тисит». В системах Линукс есть несколько вариантов реализации мультисита. Самый популярный из них — за счёт X­сервера Xorg с драйверами evdev (это единственный вариант, который реализуется по принципу «1видеокарта = 1 монитор», все остальные рассмотренные ниже варианты позволяют реа­ лизовать мультисит даже на одной видеокарте с двумя выходами). Принцип действия заключается в том, что на каждой видеокарте стартует отдельный сеанс X­ сервера. Этот вариант наиболее надёжен, стабилен, плюс ещё на каждом месте работает 3D­ ускорение, следовательно на одном компьютере можно не только вдвоём работать, но и играть, всё зависит от мощности «железа». Раньше этот вариант был самым дорогим в плане стоимости комплектующих, нужно было покупать материнские платы с двумя разъёмами PCI­E и две видео­ карты. Реализовать его на «офисных» материнских платах было очень тяжело, поскольку встроен­ ная видеокарта отключалась при установке внешней, старые видеокарты PCI найти практически не­ возможно, а новые (серии Matrox G450/550 и Nvidia Quadro NVS280) стоят очень дорого. Сейчас же недорогие материнские платы сделаны таким образом, что при установке внешней видеокарты встроенная продолжает работать (если только её не отключить вручную в BIOS'е). В интернете есть очень много различных описаний мультисита на X/Xorg'е, самый популярный пример для си­ стемы Debian можно посмотреть здесь: http://www.automation.dn.ua/linux/3d­multiseat.html Очень оригинальна идея с использованием MPX (использование двух клавиатур и двух мышек на одном рабочем столе), это не мультисит, но попробовать стоит: http://wearables.unisa.edu.au/mpx/?q=main_ru Второй по популярности вариант — использование вложенного X­сервера . Этот вариант в отличии от предыдущего позволяет реализовать мультисит на одной видеокарте с двумя видеовы­ ходами. Принцип действия таков: сначала стартует основной X­сервер, а поверх него стартуют несколько сеансов Xephyr­сервера. Этот вариант считается бюджетным, поскольку позволяет реа­ лизовать большее количество мест, но у него есть довольно много недостатков. Например, не рабо­ тает 3D­ускорение (хотя в последних версиях появилась поддержка OpenGL), меньшая стабиль­ ность, меньшая скорость работы (поскольку Xephyr сам по себе довольно «медлительный»), нет поддержки изменения разрешения экрана «на лету». Но работы на этим проектом продолжаются, недостатки устраняются, появляются новые возможности. Вместе с проектом Xephyr развивается ещё один — Xnest, который не пользуется популярностью из­за ещё большего количества недостатков. Поэтому и я вам применять на практике его не реко­ мендую. Третий вариант – использование программы Multiplier от компании Userful. Эта утилита являет­ ся платной, её стоимость составляет 99$ за каждое рабочее место (для учебных учреждений ­ 69$). Вы также получите USB­хаб для подключения клавиатуры, мыши и наушников. Однако на 2 рабо­ чих места программу можно использовать бесплатно в домашних условиях, но её всё равно необхо­ димо регистрировать через интернет для получения ключа. Если вы её не зарегистрируете, то про­ грамма через произвольные промежутки времени будет отключать все мониторы на 20 секунд и по­ казывать окно с предупреждением. Ключ на 2 монитора генерируется в зависимости от адреса элек­ тронной почты и IP­адреса, с которого был отправлен запрос на получение ключа. Установить программу можно либо прямо из репозиториев , либо скачав установочный пакет с официального сайта: http://userful.com/support/all­downloads/umx­download Принцип действия программы заключается в следующем: запускается пропатченный 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/3d­multiseat.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 Установочный файл ati­driver­installer­­x86.x86_64.run имеет размер более 90 МБ, но он универсальный и рассчитан сразу на платформы 32 и 64 бита. Итак, делаем скачанный файл исполняемым, присваиваем права root'а и запускаем установку пу­ тём двойного щелчка мышкой, либо открываем консоль, залогиниваемся под root или через sudo за­ пускаем установку драйвера: sh ./ati­driver­installer­­x86.x86_64.run и далее просто соглашаемся с лицензией и делаем то, о чем скажет программа установки. Рекомен­ дую выбрать автоматический режим установки. После всех проделанных действий перезагружаем компьютер. Если после перезагрузки возникли какие­либо проблемы, то можно пересоздать файл xorg.conf командой /usr/bin/aticonfig ­­initial ­f Чтобы удалить драйвер, нужно в консоли выполнить команду: sh /usr/share/ati/fglrx­uninstall.sh и затем перезагрузиться.

Установка драйверов 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=en­us Установочный файл будет называться NVIDIA­Linux­x86­­pkg1.run (для 32­битных платформ) или NVIDIA­Linux­x86_64­­pkg2.run (для 64­битных платформ). Проверяем, чтобы были установлены нужные пакеты и удалены ненужные. Обязательно просле­ дите, чтобы для вашей версии ядра были установлены пакеты linux­headers, ну и соответственно па­ кеты для компиляции: build­essential (вместе с ним должны установиться пакеты gcc, g++, make и libc6­dev), pkg­config, binutils, xserver­xorg­dev: sudo apt­get install linux­headers­`uname ­r` binutils pkg­config build­ essential xserver­xorg­dev А все пакеты nvidia­, nvidia­glx­new и т.д., если они установлены, обязательно необходимо удалить полностью: sudo apt­get ­­purge remove nvidia­* Если настройка мультисита ведётся в Ubuntu версии 9.10 или ниже, открываем файл /etc/default/linux­restricted­modules­common, в строке DISABLED_MODULES вносим следующие изменения: DISABLED_MODULES="nv nvidia nvidia_legacy nvidia_new". Если этого не сделать, то при перезагрузке система попытается восстановить некоторые библиотеки из пакета linux­restricted­ modules, и в итоге у нас графическая оболочка не запустится. Для Ubuntu 10.04 и выше редактиру­ ем файл /etc/modprobe.d/blacklist.conf, прописав в него строки: blacklist vga16fb blacklist nouveau blacklist rivafb blacklist nvidiafb blacklist rivatv Теперь еще одна тонкость: драйвер должен устанавливаться только при выключенной графиче­ ской оболочке. Поэтому переходим в другой терминал при помощи Ctrl+Alt+F1, залогиниваемся под пользователем с привилегиями администратора или под root'ом и останавливаем графическую оболочку командой sudo /etc/init.d/gdm stop или service gdm stop в Ubuntu 10.04 (при­ мечание: если у вас вместо GDM установлен другой менеджер загрузки, то соответственно нужно дать команду для остановки именно вашего менеджера). Переходим в домашний каталог и от име­ ни root'а запускаем установку драйвера: sh ./NVIDIA­Linux­x86­­pkg1.run Можно поступить ещё проще: при помощи Midnight Commander сделать файл исполняемым, а затем запустить его клавишей Enter. Если у программы установки никаких "претензий" к системе не будет, то сразу появится текст лицензионного соглашения, которое мы будем обязаны принять. Если же будет что­то не так, то обязательно посмотрите сообщение об ошибке и устраните её. На следующем шаге программа установки спросит, где находятся готовые модули драйвера. По­ скольку у нас их нет, то можно не проверять предложенный путь, а сразу нажать OK. Далее про­ грамма соответственно выдаст, что в указанном каталоге модули не найдены, и предложит скачать их с официального FTP. Здесь обязательно нужно ответить отказом. Затем программа спросит, же­ лаем ли мы собрать эти модули самостоятельно. На этот и все последующие вопросы нужно отве­ чать OK. В конце процесса установки программа спросит, желаем ли мы, чтобы встроенная программа nvidia­xconfig сконфигурировала файл xorg.conf автоматически; отвечаем "Yes". Откроем вновь со­ зданный xorg.conf и проверяем: в секции [Section "Device"] строка Driver должна выглядеть так: Driver "nvidia". Если там прописан какой­либо другой модуль (например, "nv"), исправьте его. Мож­ но так же добавить в эту же секцию строку Option "NoLogo" "TRUE", чтобы при загрузке X­сервера не появлялся логотип nVidia (некоторых это раздражает). В секции [Section "Module"] закомментировать (или удалить) строки: Load "dri" и Load "GLCore", и добавить в этот же раздел строку Load "glx", если она отсутствует. Примечание: для удаления драйвера нужно также остановить работу графической оболочки и перейти в каталог с установочным файлом, а затем набрать команду sh ./NVIDIA­Linux­x86­­pkg1.run ­­uninstall Перезагружаем компьютер, чтобы установленные драйвера начали работать, и проверяем, что всё прошло успешно. Сначала посмотрим, что драйвера установились нормально: lsmod | grep nvidia Результат должен быть такой: nvidia 7096260 70 agpgart 30216 2 nvidia i2c_core 20096 5 nvidia,it87,i2c_isa,i2c_nforce2,i2c_piix4 Второй шаг: проверяем, что ускорение работает: glxinfo | grep direct Результат: direct rendering: Yes Далее проверяем, что система использует именно проприетарные драйвера видеокарты: glxinfo | grep vendor Результат: server glx vendor string: NVIDIA Corporation client glx vendor string: NVIDIA Corporation OpenGL vendor string: NVIDIA Corporation Второе условие наиболее важно, поскольку без него ничего работать не будет. ШАГ 2: выполнение важных системных настроек Если перед установкой драйверов вы не делали настройку системы, то это нужно сделать перед началом настройки мультисита: 1) создаём других пользователей, в том числе и root'а, присваиваем им пароли, необходимые права; обязательно нужно войти в систему под профилем каждого пользователя и отключить эффекты ра­ бочего стола . 2) выполняем настройки сети и интернета, синхронизацию времени через интернет, запускаемые службы, настройку печати и т. д. 3) для мультиситов на XGL и Xephyr нужно настроить GDM (для версий 2.20 и ниже): • в случае с XGL необходимо использовать программу­приглашение gdmlogin вместо стандартной gdmgreeter: заходим в меню Система → Администрирование → Окно входа в систему → вкладка «Локальный вход» → в пункте «Стиль» выставляем «Простой» (пользователь будет вводить и имя, и пароль) или «Простой с выбором изображений» (пользователь будет выбирать своё имя из списка, затем вводить только пароль), и далее в этой же вкладке настраиваем его под свои требова­ ния; вариант ручного редактирования: в файл gdm.conf­custom в секцию [daemon] прописать строку: Greeter=/usr/lib/gdm/gdmlogin • пока у нас открыто нужное окно, сделаем другие настройки: не рекомендуется включать пара­ метр «Включить автоматический вход в систему» во вкладке «Безопасность», иначе пользова­ тель, для которого включен этот параметр, рискует увидеть свой рабочий стол на мониторе другого пользователя. • во вкладке «Общие» отключить параметр «Запретить несколько параллельных сеансов для од­ ного пользователя», иначе при попытке пользователя дважды войти в систему графическая обо­ лочка выпадет в чёрный экран, а в данном случае при попытке дважды войти под одним и тем же логином система выдаст предупреждение, что такой сеанс уже существует (хотя, если нажать «Вернуться к текущему сеансу», графическая оболочка всё равно выпадает в черный экран); 4) также рекомендую удалить network­manager, а вместо него установить wicd, поскольку в мульти­ сите им гораздо удобнее пользоваться; 5) всем пользователям необходимо дать привилегии на некоторые действия, например, подключать и отключать сменные носители, отключать компьютер и т. д. В Ubuntu версий 8.04 — 9.04 для этого существует специальная утилита: Система → Администрирование → Полномочия или в консоли ввести команду polkit­gnome­authorization Теперь предоставляем всем необходимые привилегии. Например, чтобы разрешить пользовате­ лям монтировать флэшки, идем в ветку org → freedesktop → hal → storage и в необходимых дей­ ствиях даём формальные привилегии выбранным пользователям. В Ubuntu 9.10 и выше система привилегий PolicyKit была заменена на DeviceKit, которая пока что не имеет графической оболочки, и все привилегии придётся предоставлять одним из трёх способов: а) отредактировать файл /etc/polkit­1/localauthority.conf.d/51­ubuntu­admin.conf или подобный. Вот пример его содержимого: [Configuration] AdminIdentities=unix­group:admin В этом файле, мы указываем группу или группы, которые DeviceKit будет считать как группы администраторов. Можно внести сюда свои изменения, но лучше этого делать. б) отредактировать конфиги из каталога /usr/share/polkit­1/actions В этом каталоге лежат конфиги, которые описывают поведение DeviceKit на определенные дей­ ствия. Файл, который сейчас нас интересует, называется org.freedesktop.udisks.policy, он имеет структуру XML. Вот кусок его содержания, который мы можем поправить: Mount a system­internal device Montér en intern enhed Eingebautes Gerät einhängen Authentication is required to mount the device Autorisering er påkrævet for at montere et fil system Zugriffsrechte werden benötigt um das Gerät einzuhängen no no auth_admin_keep Строка

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/by­path/ или /dev/input/by­id/, которые в свою очередь являются симлинками на /dev/input/eventX. Разница между ними такова: идентификаторы из /dev/input/by­path/ привязаны к конкретному порту, и вы сможете применять любую модель кла­ виатуры и мыши, но они обязательно должны быть подключены к определённому порту USB или PS/2; идентификаторы из /dev/input/by­id/ привязываются к имени клавиатур и мышек, и вы може­ те подключать клавиатуры и мышки в любой порт; но если у вас клавиатуры или мышки одина­ ковые, то эти идентификаторы применять нельзя. Применять идентификаторы /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.gentoo­wiki.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/x­ttcidfont­conf.d/dirs/TrueType" FontPath "built­ins" 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/by­path/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/by­path/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 apt­get install xserver­xephyr xserver­xorg­input­evdev В других дистрибутивах пакет установки 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/by­path/$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/by­path/$1") fi else if ! expr match $1 'vt[0­9][0­9]*' >/dev/null; then args=("${args[@]}" "$1") fi fi shift done echo $XEPHYR "${args[@]}" >> /tmp/logXephyr exec $XEPHYR "${args[@]}" Данный скрипт я подсмотрел здесь: http://netpatia.blogspot.com/2006/09/multiseat­computer­with­ubuntu.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 apt­get install xserver­xgl dbus­x11 xserver­xorg­input­evdev После установки нужно удалить файл /etc/X11/Xsession.d/98xserver­xgl_start­server, чтобы нам XGL не мешался, когда он не нужен. Также можно создать файл с именем ~/.config/xserver­ xgl/disable в домашнем каталоге каждого пользователя. В репозиториях новых версий Ubuntu 8.10 и 9.04 пакет xserver­xgl отсутствует. Также отсут­ ствуют некоторые пакеты, необходимые для компиляции XGL из исходников. Я пробовал в Ubuntu 9.04 установить пакет от 8.04, и вроде всё заработало, но возникли досадные проблемы с клавиату­ рой: индикатор раскладок напрочь отказался работать, а некоторые клавиши оказались перепутаны, и увы, никакие пляски с бубном не помогли. Но наряду с DEB­пакетами в репозиториях есть ис­ ходники, поэтому если кому интересно, можно собрать Xgl конкретно под свой дистрибутив: http://mirror.yandex.ru/ubuntu/pool/universe/x/xserver­xgl/ Необходимо скачивать версию 1.1.99.1 (более старая, которая обозначена как 7.0.0, с мультиси­ том не работает). Обязательно вместе с исходником *.orig.tar.gz скачайте файлы *.diff.gz и *.dsc, в них содержатся все необходимые данные для компиляции. Эти же файлы можно скачать с сайта: https://launchpad.net/xserver­xgl. В крайнем случае можно скачать с официальных 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 apt­get install libx11­dev libxtst­dev gizmod libncurses5­dev 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/errut­1.0.0.tar.gz wget http://research.edm.uhasselt.be/~jori/page/uploads/Misc/xevdevserver­2.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.), то создайте на него сим­ линк командой ln ­s /usr/lib/libGL.so.1 /usr/lib/libGL.so или отредактируйте 15­ю строку XGLPRELOAD, прописав в ней правильный путь до файла. Если вы настраиваете Xevdevserver для мультисита на Xephyr, то в скрипте XglScript.sh в 14­й строке XGLCOMMAND вместо пути /opt/Xgl/bin/Xgl прописываем /usr/bin/Xephyr, а если настройка ведётся для X/Xorg, то соответственно прописываем /usr/bin/X ­br ­audit 0 или /usr/bin/Xorg (в зависи­ мости от того, какой X­сервер вы применяете). Также и в первом, и во втором случае можно за ненадобностью закомментировать строку XGLPRELOAD=/usr/lib/libGL.so и другие строки, связанные с этой переменной (они расположены в самом конце скрипта), поскольку они нужны только для XGL, который "не особо дружит" с драйве­ рами GeForce: # if [ "x$XGLPRELOAD" != "x" ] ; then # export LD_PRELOAD="$XGLPRELOAD" # fi Чтобы было понятнее, можно переименовать скрипт XglScript.sh на XephyrScript.sh или XorgScript.sh соответственно. Также в случае с XGL можно немного подправить XevdevScript.sh, заменив в строке XCOMMAND параметр /usr/X11R6/bin/Xorg на /usr/bin/X ­br ­audit 0. Но если вы решите использовать сервер Xorg, то в этом скрипте ничего исправлять не надо. Копируем XglScript.sh и XevdevScript.sh в папку /usr/local/sbin, затем компилируем startsched и копируем в ту же папку sudo cp ~/*Script.sh /usr/local/sbin sudo gcc ­o startsched ~/startsched.c && cp ~/startsched /usr/local/sbin Теперь нужно дать необходимые права всем этим скриптам: владелец – root с правами r­w­x, группа – root с правами r­x, для остальных права r­x: chmod ­R 755 /usr/local/sbin chown ­R root:root /usr/local/sbin Далее распаковываем архивы errut­1.0.0.tar.gz и xevdevserver­2.0.0.tar.gz и компилируем: сначала обязательно errut, и только потом xevdevserver. Компиляция в обоих случаях проводится обычным способом: находясь внутри каталога с распакованным архивом, дать команды: ./configure make sudo make install В системах Ubuntu 8.10 и выше Xevdevserver может не скомпилироваться; если у вас такое про­ исходит, то нужно поправить исходники: в файл /src/eventdevice.h дописать строки #include и #include после #include , а в файл /src/xserverconnection.h добав­ ляем строку #include после #include . Затем необходимо дать команду make clean и повторить процесс компиляции. Более подробно компиляцию Xevdevserver обсуждают здесь: http://ubuntuforums.org/showthread.php?t=707796&page=3 Теперь, когда у нас всё готово, переходим к финальной стадии настройки. ШАГ 5: настройка менеджера загрузки Осталась самая последняя и самая главная стадия настройки – конфигурирование менеджера за­ грузки. Стандартом де­факто для разруливания мультисита стал менеджер GDM 2.20. Он позволяет раз­ рулить любой мультисит на уровне конфиг­файла без дополнительных скриптов. Правда у него есть один недостаток: нет поддержки автологина на каждом рабочем месте, но он устраняется при по­ мощи патча. Начиная с версии 2.22, GDM был полностью переписан “с нуля”, и теперь последние версии GDM не поддерживают мультисит по умолчанию. Более того, в Ubuntu 10.04 и выше GDM преды­ дущей версии 2.20 был полностью убран из репозиториев. Теперь для того, чтобы разрулить муль­ тисит при помощи GDM, необходимо использовать ConsoleKit, который в свою очередь надо пат­ чить на поддержку мультисита (хотя, как обещают разработчики, в GDM 2.32 поддержка мультиси­ та будет включена по умолчанию). Однако помимо GDM в Линуксах существуют и другие менеджеры загрузки: KDM, XDM, WDM, SDM, LXDM и т.д. К сожалению ни один из перечисленных выше менеджеров не позволяет запу­ стить вложенные сеансы на одном экране. Если вам нужен мультисит на Xephyr или XGL, то при­ дётся создавать дополнительный скрипт, который позволяет стартовать X­серверу перед менедже­ ром загрузки. Менеджер KDM как правило используется в Линуксах с оболочкой KDE, он обладает более гиб­ кими настройками, чем GDM, например, в нём уже по умолчанию есть функция автологина на каж­ дом месте, можно обойтись без дополнительных патчей. Правда у него есть недостаток: при устан­ овке KDM “тянет за собой” дополнительных пакетов более чем на 50МБ. Если для вас это не кри­ тично, то менеджер KDM станет прекрасной заменой GDM. Ниже будет приведено описание процесса настройки для каждого вида мультисита со всеми вер­ сиями GDM и KDM.

Настройка GDM версий 2.20 и ниже. Есть два пути конфигурирования: редактировать либо основной файл /etc/gdm/gdm.conf, либо дополнительный файл /etc/gdm/gdm.conf­custom (в некоторых дистрибутивах эти файлы называ­ ются соответственно /usr/share/gdm/defaults.conf и /etc/gdm/custom.conf). Во втором случае конфигурирование можно частично выполнить через графическую оболочку, войдя в меню "Администрирование → Окно входа в систему". При этом на всякий случай нужно включить запись логов событий, прописав в секцию [daemon] строку LogDir=/var/log/gdm В первом же случае все логи будут прописываться в каталоге /var/log/gdm, но мы лишаемся воз­ можности конфигурирования через графическую оболочку, все выполняется только ручками с ис­ пользованием текстового редактора. Если вы решили выбрать первый путь (редактировать файл gdm.conf), то для начала нужно из ка­ талога /etc/gdm/ убрать файлы gdm.conf­custom и gdm.conf­orig. Их можно переименовать, перене­ сти в другое место, наконец просто грохнуть (если не жалко). Также нужно раскомментировать строку Greeter=/usr/lib/gdm/gdmgreeter в секции [daemon] Но я всё­таки рекомендую редактировать дополнительный файл gdm.conf­custom, так как при этом основной файл 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 в секции для ваших устройств. Например, вы можете из строки использовать идентификатор usb­0000:00:03.0­1/input0 из строки P:Phys, или "Microsoft 3­Button Mouse with IntelliEye(TM)" из строки N:Name и даже идентификатор inputX из строки S:Sysfs и т.д. Если у вас используются одинаковые мыши и клавиатуры, то имена N:Name в качестве идентификаторов лучше не использовать. Также можно использовать идентификаторы из каталогов /dev/input/by­path/ (в этом случае привязка будет по порту, куда подключена клавиатура или мышь) или /dev/input/by­id/ (привязка будет по имени устройства), которые в свою очередь являются симлинками на eventX и будут оставаться всегда постоянными. Итак, открываем редактируемый файл и в секции [daemon] прописываем (либо ищем эту строку и раскомментируем её): AlwaysRestartServer=true Теперь есть два варианта конфигурирования. Вариант №1: первым стартует основной X­сервер, а поверх него – два сеанса Xgl+Xevdevserver. Сначала несколько замечаний: 1) в приведённом ниже конфиге в обеих секциях [server­Xgl*] строка command=… и следующая строка – это одна команда, которая должна быть написана в одну строку через пробел. Поскольку команда очень длинная, она не вместилась в данном описании в одну строку целиком, пришлось разбить на две. 2) для видеокарт Radeon в секциях [server­Xgl*] строках command вместо параметра ­accel glx:pbuffer ­accel xv:fbo для большей совместимости нужно указать другой параметр: ­accel glx:pbuffer ­accel xv:pbuffer. То же самое относится и ко второму варианту конфигурации. 3) некоторые программы используют аппаратный курсор вместо программного, и только один поль­ зователь в этом случае может использовать такие программы. У второго пользователя аппаратный курсор отключается параметром ­softcursor в строке command секции [server­Xgl1]. Если планиру­ ется делать 3 и более рабочих мест, то этот параметр нужно прописать и для всех мест, кроме од­ ного, которое стартует на дисплее :0.0; 4) вместо сервера X можно использовать сервер Xorg (как это было сделано в оригинале), в этом случае в секции [servers] строке 0=Standard нужно удалить параметр device=/dev/console, а в секции [server­Standard] в строке command прописать /usr/bin/Xorg. Как было сказано выше, в этом случае скрипт XevdevScript.sh в редактировании не нуждается. Более того: в приведенном ниже варианте этот скрипт не задействован, так что в данном случае его можно вообще удалить, но я рекомендую все­таки его оставить. Итак, для мультисита на XGL+Xevdevserver участок файла gdm.conf­custom будет таким: [servers] 0=Standard device=/dev/console 1=Xgl1 2=Xgl2

[server­Standard] name=Standard server command=/usr/bin/X ­br ­audit 0 handled=false flexible=false

[server­Xgl1] 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

[server­Xgl2] name=Xgl2 command=/usr/local/sbin/XglScript.sh ­display :0.0 ­keyboard usb­0000:00:1d.2­2/input0 ­mouse usb­0000:00:1d.2­1/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/by­path/ и /dev/input/by­id/), S:Sysfs и P:Phys. С последними двумя Xephyr из­ начально "не знаком", в других конфигурациях для этого нужен отдельный скрипт, который преоб­ разует eventX в P:Phys и затем привязывает один к другому. В нашем случае благодаря Xevdevser­ ver таких манипуляций не требуется. Для варианта Xephyr+evdev, в котором вместо Xevdevserver'а применяется скрипт Xephyr.sh, нужно использовать только идентификаторы из каталога /dev/input/by­path/. Строки command в этом случае будут такими: command=/usr/sbin/Xephyr.sh ­display :0.0 ­xauthority /var/lib/gdm/:0.Xauth ­fullscreen ­keyboard platform­i8042­serio­0­event­kbd ­mouse platform­i8042­serio­1­event­mouse Вариант №2: Xevdevserver и XGL­сеансы стартуют перед основным X­сервером, таким образом они получат управление устройствами сразу. Важное замечание: в этом конфиге не желательно использовать данные из строк N:Name в каче­ стве идентификаторов клавиатур и мышек. Также заметьте, что в отличии от предыдущего в этом варианте уже задействован скрипт XevdevScript.sh. [servers] 0=Standard 1=Xgl1 2=Xgl2

[server­Standard] name=Standard server command=/usr/local/sbin/XevdevScript.sh ­xevdev ":1,isa0060/serio0/input0,isa0060/serio1/input0" ­xevdev ":2,usb­0000:00:1d.2­2/input0,usb­ 0000:00:1d.2­1/input0" handled=false flexible=false

[server­Xgl1] 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

[server­Xgl2] 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" в секции [server­Standard] означает, что все сигналы, поступающие с клавиатуры с идентификатором isa0060/serio0/input0 и мыши isa0060/serio1/input0 будут переадресованы на дисплей :1. Ну а как в данном варианте правильно прописать строки command для варианта Xephyr+Xevdev­ server, я думаю, вы догадаетесь сами. Для Xephyr+evdev этот вариант применить нельзя. Если вы настраиваете самый популярный вариант мультисита Xorg+evdev, то участок файла, где прописываются X­серверы, будет выглядеть так: [servers] 0=Standard1 1=Standard2

[server­Standard1] 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

[server­Standard2] 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 usb­0000:00:1d.2­2/input0 ­mouse usb­0000:00:1d.2­1/input0 ­isolateDevice PCI:0:2:0 ­sharevts ­nolisten tcp ­novtswitch ­xkbmap us Соответственно для каждой секции [server­Standard*] в этой строке необходимо прописать свои парамет­ ры. Как правильно прописать параметры ­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, libck­connector0, libck­connector­dev и libpam­ck­connec­ 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 ­­set­selections echo gdm hold | dpkg ­­set­selections echo libck­connector0 hold | dpkg ­­set­selections echo libck­connector0­dev hold | dpkg ­­set­selections echo libpam­ck­connector hold | dpkg ­­set­selections echo libck­connector­dev hold | dpkg ­­set­selections Можно также самостоятельно наложить патчи на исходники GDM и ConsoleKit из репозиториев. Скачиваем и распаковываем патчи: wget http://dl.dropbox.com/u/1106740/Multiseat/gdm­2.30.0.tar.lzma wget http://dl.dropbox.com/u/1106740/Multiseat/consolekit­0.4.1.tar.lzma unlzma gdm­2.30.0.tar.lzma && unlzma consolekit­0.4.1.tar.lzma tar xf gdm­2.30.0.tar && tar xf consolekit­0.4.1.tar Скачиваем исходники и устанавливаем необходимые пакеты: sudo apt­get build­dep gdm consolekit sudo apt­get install gnome­common dpkg­dev autogen fakeroot Компилируем GDM: CFLAGS="­g ­O2 ­g ­Wall ­O2" CXXFLAGS="­g ­O2 ­g ­Wall ­O2" CPPFLAGS="" LDFLAGS="­Wl,­Bsymbolic­functions" ./autogen.sh ­­build=i486­linux­gnu ­­prefix=/usr ­­includedir="\${prefix}/include" ­­mandir="\$ {prefix}/share/man" ­­infodir="\${prefix}/share/info" ­­sysconfdir=/etc ­­localstatedir=/var ­­libexecdir="\${prefix}/lib/gdm" ­­disable­maintainer­ mode ­­disable­dependency­tracking ­­disable­silent­rules ­­srcdir=. ­­disable­scrollkeeper ­­with­at­spi­registryd­directory=/usr/lib/at­spi ­­enable­ipv6=yes ­­with­incomplete­locales ­­with­selinux sudo dpkg­buildpackage Компилируем ConsoleKit: CFLAGS="­g ­O2 ­g ­Wall ­O2" CXXFLAGS="­g ­O2 ­g ­Wall ­O2" CPPFLAGS="" LDFLAGS="­Wl,­Bsymbolic­functions" ./autogen.sh ­­build=i486­linux­gnu ­­prefix=/usr ­­includedir="\${prefix}/include" ­­mandir="\$ {prefix}/share/man" ­­infodir="\${prefix}/share/info" ­­sysconfdir=/etc ­­localstatedir=/var ­­libexecdir="\$(prefix)/lib/ConsoleKit" ­­disable­ maintainer­mode ­­disable­dependency­tracking ­­disable­silent­rules ­­srcdir=. ­­enable­pam­module ­­enable­docbook­docs ­­with­pid­ file=/var/run/console­kit­daemon.pid sudo dpkg­buildpackage Когда всё готово, приступим непосредственно к настройке. В каталоге /etc/ConsoleKit/seats.d создаём файл с именем 01­seat1.seat: sudo gedit /etc/ConsoleKit/seats.d/01­seat1.seat и наполняем его следующим содержимым: [Seat Entry] Version=1.0 Name=Seat1 ID=Seat1 Description=Seat 1 Hidden=false Devices= Sessions=Seat1; Таким же образом создаём второй файл 02­seat2.seat и прописываем в него то же самое с по­ правкой на второе место. Точно также делаем и для всех остальных мест (если их будет больше двух). После проделанных действий редактируем файл /etc/ConsoleKit/seats.d/00­primary.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 apt­get install kdm Во время установки необходимо выбрать менеджером по умолчанию KDM, либо это можно сде­ лать после установки, изменив в файле /etc/X11/default­display­manager имеющуюся строку на /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­:0­Core] # Если нужен автологин, раскомментируйте все строки #AutoLoginEnable=true # Автологин после рестарта рабочего места #AutoLoginAgain=false #AutoLoginDelay=0 #AutoLoginLocked=false #AutoLoginUser=USERNAME #AutoLoginPass=PASSWORD ClientLogFile=.xsession­errors # Для запуска рабочего места можно использовать любую из двух строк ниже 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­:1­Core] #AutoLoginEnable=true #AutoLoginAgain=true #AutoLoginDelay=0 #AutoLoginLocked=false #AutoLoginUser=USERNAME #AutoLoginPass=PASSWORD ClientLogFile=.xsession­errors 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­:0­Core] (которое как правило стартует на интегрированной видеокарте), а все остальные запустятся нормально, тогда необходимо убрать ключ ­sharevts из строки запуска X­сервера для этого места! Ключи с номерами виртуальных терминалов указывать не обязательно, поскольку при старте си­ стемы первое место окажется на терминале 7, второе – на произвольном. Но если что­то работает некорректно, тогда попробуйте прописать эти ключи, привязав места к другим терминалам. ВНИМАНИЕ! Приведённый ниже метод – пока что только наброски, на практике он ещё мною не отрабатывался! Для настройки мультисита на Xephyr+evdev необходимо установить дополнительную программу runit: sudo apt­get install runit Поскольку KDM по умолчанию не может запускать вложенные сеансы на одном экране, как в GDM 2.20, то эта программа позволяет остановить сеанс KDM, затем запустить X­сервер, а уже по­ верх него запустить сеансы Xephyr. Данный метод был подсмотрен здесь: http://theor.jinr.ru/~varg/web/linux/multihead/ Итак, после установки программы в каталоге /etc/sv/ создаём ещё два: xserver­hw и kdm­ xephyr, в каталоге /etc/sv/xserver­hw создаём файл run: sudo gedit /etc/sv/xserver­hw/run Копируем в этот файл следующее содержимое: #!/bin/sh sv stop kdm exec /usr/bin/X :0 vt7 ­config /etc/X11/xorg.conf ­dpi 96 ­nolisten tcp Теперь в каталоге /etc/sv/kdm­xephyr также создаём файл run: sudo gedit /etc/sv/kdm­xephyr/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 xserver­hw exec 2>&1 exec /usr/bin/kdm ­config /etc/kde4/kdm/kdmrc ­nodaemon ­error /dev/stderr Делаем оба скрипта исполняемыми: chmod ­R 755 /etc/sv/xserver­hw/run chmod ­R 755 /etc/sv/kdm­xephyr/run Теперь правим файл /etc/kde4/kdm/kdmrc по аналогии, как приведено выше, только строки за­ пуска X­сервера будут иметь вид: ServerCmd=/usr/sbin/Xephyr.sh v :1 ­display :0 vt7 ­p 5 ­fullscreen ­keyboard platform­i8042­serio­0­event­kbd ­mouse platform­i8042­serio­1­ event­mouse Соответственно для второго места будет ключ v :2, а также изменятся ключи ­keyboard и ­mouse. После проделанных манипуляций перезагружаемся.

ПОСЛЕДНЯЯ СТАДИЯ: «ДОПИЛИВАЕМ» СИСТЕМУ Когда вы настроите мультисит, считайте, что на три четверти вы дело сделали. Однако для пол­ ноты счастья нужно немного "поработать напильником". 1) Если после полной настройки системы на рабочих местах не работает автоповтор с клавиатуры каких­либо клавиш, то каждому пользователю в ~/.bashrc надо добавить строку xset r on В Ubuntu 9.04 после настройки мультисита не работал автоповтор клавиш «влево» и «вниз»; если совет выше не помогает, то в ~/.bashrc прописываем строку xset r 113; xset r 116 2) Под профилем каждого пользователя в меню Система → Параметры → Управление питани­ ем (программа gnome­power­preferences) во вкладках "При питании от сети" и "От бата­ реи" в параметрах "Приостанавливать компьютер через" и "Отключать дисплей через" ползун­ ки поставить в максимальное положение "Никогда". 3) В мультиситах на Xorg и Xephyr с драйвером evdev у клавиатур могут быть перепутаны клавиши (в частности у меня вместо клавиш «вверх» срабатывал PrintScreen на обоих местах); в GNOME эта проблема решается просто: под профилем каждого пользователя открываем Параметры → Кла­ виатура → вкладка «Раскладки», в строке "Модель" нужно указать "Evdev­managed keyboard" (или "Клавиатура, управляемая драйвером evdev"), а затем открыть Параметры → Комбинации клавиш клавиатуры, найти действие «Получить снимок экрана» и вместо клавиши Print указать другую комбинацию клавиш, например, Ctrl+Print; 4) если совет выше не помогает, то необходимо на уровне системы привязать к каждой неправильно работающей клавише нужное действие; делается это так: запускаем в консоли программу xev, на­ жимаем неправильно работающую клавишу и записываем на отдельный листок бумаги параметры keycode, keysym и действие, которое в данный момент привязано к клавише; далее открывает файл /usr/share/X11/XKeysymDB, ищем в нём строку с действием, к которому привязана клавиша, и удаляем из этой строки keysym­код клавиши; затем ищем строку с той функцией, которая нам нуж­ на, и удаляем из неё текущий keysym­код и прописываем код нашей клавиши; теперь при помощи команды xmodmap ­pke | grep проверяем, что нашей клавише присвоено нужное действие; Примечание: если некоторые клавиши неправильно работают в какой­либо раскладке, то достаточ­ но в каталоге /usr/share/xmodmap/ подредактировать примерно таким же способом файл с именем нужной раскладки; если же клавиши работают неправильно только под профилем одного пользова­ теля, то в его профиле в файл ~/.bashrc нужно прописать команду: xmodmap ­e "keycode <код_клавиши> = <действие>" 5) В случае настройки мультисита на основе Xephyr или XGL некоторые программы windows могут не запуститься в Wine, поскольку при их запуске меняется разрешение экрана, а в данной конфигу­ рации это невозможно. Но решение есть: для этого войти в конфигуратор Wine (команда winecfg) и во вкладке «Графика» установить флажок «Эмулировать виртуальный рабочий стол», и затем выставить нужное разрешение для этого стола. 6) При подключении флэшки, дискеты, CD­диска или другого носителя на втором рабочем столе появляется сообщение «Не могу смонтировать том». Это является следствием того, что система пытается 2 раза смонтировать носитель. А в результате производить запись на носитель сможет только первый пользователь. Для того, чтобы устройство стало доступно для записи второму поль­ зователю, первый должен у себя устройство отмонтировать, а второй — присоединить, что не очень удобно. Чтобы отключить автомонтирование, нужно под профилем каждого пользователя запустить Ре­ дактор конфигурации gconf­editor, пройти в ветку /apps/nautilus/preferences/ и снять галочки с параметров media_automount и media_automount_open; затем открыть ветку /apps/nautilus/desktop/ и снять галочку volumes_visible. В этом случае все носители монтируются только в случае обраще­ ния к ним; пользователь может начать работать с ними, выбрав в меню «Переход» нужный диск. Это действие нужно выполнить под профилем каждого пользователя. 7) у многих может возникнуть вопрос: а как же администрировать такую систему с использованием удалённого рабочего стола? И даже на этот вопрос есть решение. Сначала каждый пользователь должен зайти в программу удаленного рабочего стола: Система → Параметры → Удалённый рабочий стол (команда vino­preferences) и поставить следую­ щие галочки: а) во вкладке "Общие": ставим все галочки, кроме "Требовать от пользователя ввести пароль" (если установить эту галочку, то почему­то потом происходит сбой авторизации при соединении); б) в версиях vino 2.22 и ниже во вкладке "Дополнительно": ставим галочку "Использовать аль­ тернативный порт", и вот уже здесь каждый пользователь должен прописать для себя свой порт; например, user1 будет использовать порт 5901, user2 — 5902, user3 — 5903 и т.д.; остальные галоч­ ки выставляются по желанию. В последних версиях vino порт указывается иначе: нужно запустить Редактор конфигурации gconf­editor, открыть ветку desktop → gnome → remote_access и в ключе alternative_port указать нужный порт. Теперь, когда администратор будет обслуживать систему при помощи программы "Просмотр удалённых рабочих столов" (команда vinagre %U), он в параметрах соединения должен указать порт для того пользователя, к которому желает "подцепиться"; например, для user2 администратор должен указать порт не 5900, а уже 5902. 8) как разрулить звук на несколько пользователей: вариант №1: если в системном блоке несколько звуковых карт (например, две: одна встроенная и одна PCI), то звук можно настроить за счёт самой системы, для этого под профилем каждого поль­ зователя через меню настроек звука достаточно выбрать свою звуковую карту; также это необходи­ мо сделать в апплете управления громкостью, который находится рядом с часами, иначе получится ситуация, когда будет регулироваться общий звук; до кучи нужно сделать настройки, чтобы звук от игр, которые запускаются через Wine, также шёл на разные аудиокарты, для этого достаточно в переменных окружения установить AUDIODEV и MIXERDEV на устройства, которые вам захочется. Например один игрок будет пользоваться картой №1, второй №2. Узнаем, какие аудиоустройства у нас имеются: ls /dev/dsp* /dev/dsp /dev/dsp1 ls /dev/mixer* /dev/mixer /dev/mixer1 Теперь, чтобы привязать каждому пользователю свою аудиокарту, достаточно в ~/.bashrc доба­ вить следующие строки: export MIXERDEV=/dev/mixer export AUDIODEV=/dev/dsp Для второго пользователя параметры будут mixer1 и dsp1, для третьего — mixer2 и dsp2 и т.д. Более подробно можно прочитать здесь: http://linux.automation.dn.ua/forum/viewtopic.php?f=3&t=41 вариант №2: использование одной аудиокарты 7.1 на нескольких пользователей: необходимо создать файл .asoundrc в домашнем каталоге каждого пользователя; в него включа­ ем следующие данные: pcm.alc883 { type dmix ipc_key 2048 slave { pcm "hw:0" rate 44100 period_time 0 period_size 1024 channels 8 } bindings { 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 } } # green ­ "Front" in Alsa mixer pcm.green { type plug slave { pcm "alc883" channels 8 } ttable.0.0 1 ttable.1.1 1 } # gray ­ "Surround" in Alsa mixer pcm.gray { type plug slave { pcm "alc883" channels 8 } ttable.0.2 1 ttable.1.3 1 } # yelow ­ "Center" in Alsa mixer (mono?) pcm.yelow { type plug slave { pcm "alc883" channels 8 } ttable.0.4 1 ttable.1.5 1 } # black ­ Side in alsa mixer pcm.black { type plug slave { pcm "alc883" channels 8 } ttable.0.6 1 ttable.1.7 1 } pcm.!default { type plug slave { pcm "gray" channels 8 } } Теперь внизу увидите секцию с названием default — какой цвет пропишите, к такому выходу подключайте, в микшере указанные ползунки перемещайте и будет у вас звук. Нужно сделать генерацию этого файла при логине пользователя (с помощью .bashrc). Это дела­ ется очень просто с использованием регулярных выражений: скрипт должен учитывать содержимое переменной окружения DISPLAY и согласно расположения ваших мест генерировать каждому пользователю свой вывод. Не забудьте скопировать файл, генерирущий .asoundrc, в /etc/skel, иначе придется каждый раз его копировать при добавлении нового пользователя. Если при этом в Wine будет выдаваться такая ошибка: err:dsound:DSOUND_MixOne Fatal error. Under/Overflow? primary_done=12160, mixpos=172032/172716 (85678/86018), primary_mixpos=1584, writepos=1712, mixlen=8192 то в скрипте параметр period_size = 1024 надо уменьшить до 512 или 256. Совет взят отсюда: http://linux.automation.dn.ua/forum/viewtopic.php?f=1&t=68 9) в Ubuntu 10.04 и выше вместо звукового сервера ALSA применён сервер PulseAudio, который при разруливании мультисита перестаёт работать; чтобы он заработал, надо выполнить следующие действия: а) добавить каждого пользователя в группу "pulse­access": sudo usermod ­a ­G pulse­access б) редактируем файл /etc/pulse/daemon.conf: необходимо внести следующие исправления: daemonize = yes system­instance = yes в) в файле /etc/pulse/client.conf исправляем строку autospawn = no; г) в файле /etc/default/pulseaudio исправляем строку PULSEAUDIO_SYSTEM_START=1 д) перезагружаемся.

ЗАКЛЮЧЕНИЕ: В данной статье я попытался рассмотреть все возможные варианты реализации технологии 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/multiseat­computer­with­ubuntu­804.html http://netpatia.blogspot.com/2009/06/multiseat­in­ubuntu­904.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.puc­rio.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/by­path/platform­i8042­serio­1­event­mouse" Option "GrabDevice" "on" Option "Emulate3Buttons" "no" Option "ZaxisMapping" "4 5" EndSection

Section "InputDevice" Identifier "Mouse2" Driver "evdev" Option "Device" "/dev/input/by­path/pci­0000:00:1d.3­usb­0:2:1.0­event­mouse" 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/by­path/pci­0000:00:1d.3­usb­0:1:1.0­event­kbd" 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/by­path/platform­i8042­serio­0­event­kbd" 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.0­83.0 Vertrefresh 56.0­75.0 Option "DPMS" EndSection

Section "Monitor" Identifier "Monitor2" Vendorname "Acer" Modelname "Acer AL1716X" Horizsync 30.0­83.0 Vertrefresh 56.0­75.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[c­i][1­4], где sda и sdb — жесткие диски SATA. Поскольку USB­устройств великое множество (например мо­ бильники, где два устройства на шнур). Поэтому лучше написать правила с двухкратным запасом. и так для каждого /dev/sd[c­i] и /dev/sd[c­i][1­4] При подключении флэшки запускается скрипт f2p.sh: #!/bin/bash export USB_PORT=$(ls ­l /sys/block/$(echo $@ | sed s@/dev/@@ | sed \ s/[1234567890]$//)/device | awk ­F' ­> ' '{ print $2}' | awk ­F'/' '{ print \ $8}' | awk ­F'.' '{ print $2}') if [ "$USB_PORT" == "1" ]; then sudo ­u venus0 sh ­c "pmount ­s ­u 077 ­c koi8­r $@" echo "file://$(mount | grep $@ | awk '{ print $3 }') flash" \ >> /home/venus0/.gtk­bookmarks elif [ "$USB_PORT" == "2" ]; then sudo ­u venus1 sh ­c "pmount ­s ­u 077 ­c koi8­r $@" echo "file://$(mount | grep $@ | awk '{ print $3 }') flash" \ >> /home/venus1/.gtk­bookmarks elif [ "$USB_PORT" == "3" ]; then sudo ­u venus2 sh ­c "pmount ­s ­u 077 ­c koi8­r $@" echo "file://$(mount | grep $@ | awk '{ print $3 }') flash" >> /home/venus2/.gtk­bookmarks elif [ "$USB_PORT" == "4" ]; then sudo ­u venus3 sh ­c "pmount ­s ­u 077 ­c koi8­r $@" echo "file://$(mount | grep $@ | awk '{ print $3 }') flash" \ >> /home/venus3/.gtk­bookmarks fi При изъятии — uf.sh: #!/bin/bash export DEV=$@ export MNT_PNT=$(mount | grep $@ | awk '{ print $3 }') umount ­l $@ sed ­i "s@file://$MNT_PNT flash@@g" /home/venus0/.gtk­bookmarks sed ­i "s@file://$MNT_PNT flash@@g" /home/venus1/.gtk­bookmarks sed ­i "s@file://$MNT_PNT flash@@g" /home/venus2/.gtk­bookmarks sed ­i "s@file://$MNT_PNT flash@@g" /home/venus3/.gtk­bookmarks Многие выдёргивают флэшки без отключенния, поэтому флэшки монтируются в синхронном ре­ жиме ­ медленно для больших файлов, но зато данные сохраняются. При подключении создаются закладки, которые доступны и в файловом менеджере, и браузере и других программах, работаю­ щих с .gtk­bookmarks. В Опере и Офисе отключить родные диалоги — теперь они используют ме­ нюшку в стиле pcmanfm и также работают с GTK диалогами.