Главная » Операційні системи » Linux » Що краще ubuntu або fedora. Что краще ubuntu або fedora

Що краще ubuntu або fedora. Что краще ubuntu або fedora

Що краще ubuntu або fedora. Что краще ubuntu або fedora

Один комп'ютер на двох (і більше) або multiseat на базі Ubuntu 10.04 LTS

З пісочниці

Systerr 27 січня 2011 у 00:04 22060

У даній статті розглядається реалізація multiseat на базі Ubuntu 10.04 LTS з апаратним прискоренням. Приклад, розглянутий в цій статті, вже введено в експлуатацію і працює близько півроку в звичайному Мінськом офісі. Описуються проблеми реалізації і впровадження готової системи в роботу з точки зору звичайного студента-електропріводчіка, який підробляє на півставки системним адміністратором.

Вступ

Ось час роботи системним адміністратором в невеликому офісі при оновленні парку комп'ютерів з'явилася невелика проблема. Сучасні комп'ютери дають рівень продуктивності, багато перевершує необхідний для офісних комп'ютерів. Причому реалії ринку такі, що відмінності в продуктивності мало позначаються на ціні. І начебто дешеві комп'ютери на базі Atom за ціновою ознакою практично не відрізняються від більш продуктивних комп'ютерів на базі звичайних процесорів Amd і Intel (материнська плата з процесором Atom коштує близько 100-150 у. Е. На травень 2010 року, Мінськ, і та ж ціна на жовтень 2010 в тому ж Мінську).

Та ж ситуація і з жорсткими дисками: для офісної роботи немає необхідності в обсязі диска більш 40-80 Гб. Але на ринку такі жорсткі диски вже практично не представлені. На момент написання статті в продажу були жорсткі диски ємністю 160 Гб (38 $), 250 Гб (39 $), 320 Гб (40 $), 500 Гб (41 $), далі відмінності за цінами помітні сильніше. Ціна за гігабайт жорстких дисків малого обсягу досить висока. Та ж ситуація і з усіма іншими комплектуючими.

Виникає закономірне питання, як раціонально все це використовувати? Давайте підійдемо логічно - щоб здешевити систему можна або купити комплектуючі гірше (не сильно здешевлює), або відмовитися від деяких комплектуючих. По суті, в робочому місці обов'язковими є пристрої введення (клавіатура, миша, планшет і т. Д.) І пристрої відображення інформації (монітор, проектор і т. Д.). Інша частина системи користувачів особливо не стосується, і від неї можна позбутися. Безумовно, від усього позбутися не вийде. Давайте заглянемо під кришку системного блоку. Тут ми обов'язково бачимо материнську плату, відеокарту (може бути вже на материнській платі), процесор (теж може бути на материнській платі) і пам'ять. А ось інші комплектуючі вже не так важливі. Оптичний привід мало затребуваний, і тому його, швидше за все, не буде.

З жорстким диском теж цікава ситуація. Його може і не бути, тоді у нас буде так звана бездискова станція. Тут вся інформація завантажується по мережі з сервера (реалізація PXE + NFS і трохи бубна). Але хочеться чогось більшого.

Тоді і виникла ідея підключити до одного комп'ютера дві клавіатури, дві миші і два монітори і змусити їх працювати незалежно. У зарубіжних джерелах такі системи називаються multiseat.

Але можна на цьому і не обмежуватися, а робити бездисковий multiseat-станцію. Цей варіант відмінно підійде для пари multiseat-станцій з сервером. У даній статті не розглядається.

Давайте пильніше поглянемо на multiseat. Щоб підключити потрібну нам кількість клавіатур і мишок нам доведеться скористатися портами USB. Зараз це не проблема. Для підключення декількох моніторів нам треба або кілька портів на відеокарті, або кілька відеокарт, або скомбінувати ці варіанти.

Після настройки всього цього у нас повинно вийти потрібне нам кількість робочих місць, здатних задовольнити всі потреби користувачів. Процесорний час і пам'ять ділиться між цими користувачами, а ситуація, коли всім користувачам одночасно знадобитися вся продуктивність системи, дуже рідкісна.

На перший погляд виходить дуже вигідна система. Але чому ж тоді про такі системи мало хто чув? Відповідь досить проста - настройка таких систем досить складна. І далеко не кожен адміністратор (навіть проффи) зможе зібрати всі ці комплектуючі разом і змусити їх працювати.

Варіанти реалізації

Давайте спробуємо почати реалізовувати таку систему. Почнемо з вибору операційної системи. Multiseat можна побудувати на базі сучасних ОС: Linux, Windows і, можливо, інших.

Відразу ж цікавий для багатьох варіант на базі ОС Windows на ділі непрактичний. По-перше, ліцензія забороняє встановлювати одну копію Windows в такі системи, тому потрібно покупка двох ліцензій, що відразу ж вбиває багато плюси, в тому числі і економію коштів. По-друге, зробити таку систему самому вельми проблематично, т. К. Треба писати або купувати додатково ПО. За ціною цей варіант наближається до варіанту покупки двох незалежних комп'ютерів, а то і перевищує його. Такий варіант розглянуто тут. У нього є і переваги - вам не треба багато думати і робити. Все вже готово, тільки ставимо софт і отримуємо результат.

Другий варіант - multiseat на базі Linux - має безліч рішень. Серед них можна виділити як рішення без апаратного прискорення (XGL, Xephyr, Xnest і т. Д.), Так і з апаратним прискоренням (xorg). У даній статті описується реалізація multiseat з апаратним прискорення на базі Ubuntu Linux 10.04 LTS.

Система виходить досить гнучкою і може працювати з будь-якою кількістю моніторів. В теорії на кожній з відеокарт запускається за власним графічного X-сервера. Далі кожен сервер запускає собі середу графічного столу (Gnome, KDE та т. Д.) ... Profit :). Тому ПК, на якому базуватиметься multiseat-система повинна володіти необхідною кількістю відеокарт.

По суті, ядро ​​Linux бере на себе всі функції розподілу апаратних ресурсів. Графічні сервера беруть в своє повне використання відеокарти і вже від ядра Linux отримують процесорний час.

Реалізація

А тепер перейдемо до практики. Як не дивно, вона відрізняється від теорії. У моєму випадку система являла собою материнську плату ASUS M3A78-CM з вбудованою відеокартою ATI Radeon 3100. Була докуплено друга відеокарта ATI Radeon 2600 і встановлена ​​в єдиний слот PCI Express 16x. Встановити більше відеокарт не проблема, проблема дістати відеокарти PCI Express 1x. Але є чудове рішення. Наступний крок: переконатися, що дві відеокарти працюють одночасно. Передбачається, що в цей момент у вас вже встановлена ​​операційна система Linux, де є відмінна консольна команда lspci, яка показується все pci-пристрої у вашій системі. Щоб обмежиться пристроями, в яких присутнє слово VGA можна зробити ось таку конструкцію: lspci | grep VGA. У моєму випадку картина була така:

$ Lspci | grep VGA

01: 05.0 VGA compatible controller: ATI Technologies Inc Radeon 3100 Graphics

02: 00.0 VGA compatible controller: ATI Technologies Inc RV630 [Radeon HD 2600 Series]

Тут ми і бачимо наші дві відеокарти. Звичайно, з'явилися вони тут не відразу. Довелося кілька разів залізти в BIOS і поміняти настройки. Результат виправдав очікування.

Далі, за інерцією, було встановлено пропріетарний драйвер ATI. Ця була дуже груба помилка. Але я зрозумів про це пізніше. І вам розповім теж пізніше :).

Тепер ще трохи теорії. Розглянемо, як завантажується система. До моменту завантаження дисплейного менеджера (GDM, KDM і т. Д.) Відбувається багато всього, але це залишиться за рамками даної статті. Як тільки дисплейний менеджер завантажився, він зажадає від вас ввести ім'я користувача і пароль (або не зажадає, якщо ви його так налаштували). І далі він запускає Xorg-сервер і обрану вами робочу середу. Якщо його добре попросити, то він може запустити і кілька Xorg-серверів з різними настройками і для різних користувачів і, за бажанням, з різними менеджерами робочого столу.

Налаштування KDM

А тепер до практики. Деякі дисплейні менеджери дуже складно вмовити і треба їх навіть патчить (GDM), тому вибираємо KDM, який більш розуміючий. За замовчуванням він в системі не встановлений. Установка вирішується простою командою в консолі: sudo apt-get install kdm. Погоджуємося і чекаємо. Якщо все успішно, KDM встановлено. Тепер почнемо його вмовляти :). Файл, що відповідає за настройку менеджера, знаходиться в / etc / kde4 / kdm і називається kdmrc. У ньому дуже багато налаштувань, але нас цікавить все пара. У секції [General] міняємо два параметра таким чином:

[General]

StaticServers =: 0, 1

ReserveServers =: 2, 3

Це означає, що KDM буде запускати сервера 0 і 1, а сервера 2 і 3 не чіпатиме. Далі шукаємо секцію [X-: 0-Core] і міняємо в ній налаштування таким чином:

[X-: 0-Core]

ServerAttempts = 2

ServerArgsLocal = - br - nolisten tcp - layout seat1 - isolateDevice PCI: 2: 0: 0 vt6

AutoLoginEnable = true

AutoLoginUser = alexandr

Перший параметр ServerAttempts = 2, можливо, ні на що не впливає, він з'явився шляхом довго стукання в бубон і спроб запустити систему. Як то кажуть, так склалося історично :).

Найважливіший параметр - це наступний, ServerArgsLocal = - br - nolisten tcp - layout seat1 - isolateDevice PCI: 2: 0: 0 vt6. Розглянемо його. Це аргументи запуску графічного сервера Xorg. Давайте розглянемо їх:

-br - замість сірого візерунка буде чорний фон. Так трохи красивіше.

-nolisten tcp - ця опція говорить про те, що не треба використовувати tcp / ip для роботи, або що сервер запускається локально.

-layout seat1 каже, яку конфігурацію слід використовувати з файлу xorg. conf (про нього пізніше).

-isolateDevice PCI: 2: 0: 0 - головна опція, просить сервер використовувати тільки одну відеокарту, яка PCI: 2: 0: 0.

Vt6 показує, що сервер запуститься на шостому віртуальному терміналі.

Наступна опція (AutoLoginEnable = true) включає автоматичний вхід в систему під користувачем AutoLoginUser = alexandr. Не забудьте її поміняти на ім'я вашого користувача :).

Далі модифікуємо файл таким чином:

[X-: 1-Core]

ServerAttempts = 2

ServerArgsLocal = - br - nolisten tcp - layout seat0 - sharevts - novtswitch

- IsolateDevice PCI: 1: 5: 0 vt5

AutoLoginEnable = true

AutoLoginUser = andrey

Майже з усім опціями ми вже знайомі. Звертаю увагу на - layout seat0. Це вже інша конфігурація seat0 з файлу xorg. conf. Двох однакових конфігурацій бути не може, т. К. Нічого не буде працювати. Також змінилося і пристрій - isolateDevice PCI: 1: 5: 0 і віртуальний термінал vt5. Опція - sharevts змушує сервера працювати одночасно на одному терміналі, а - novtswitch забороняє змінювати поточний термінал натисканням клавіш Ctrl + Alt + n, де n - номер віртуального терміналу. Більш докладно про опції запуску х-сервера можна дізнатися з консолі (man xserver). Далі слід параметр включення автологіна і вказано ім'я користувача (andrey).

Так, і не забудьте створити двох користувачів. Зробити це можна командою в консолі ADDUSER. Там же є і графічна оболонка. На перший запуск слід відключити опцію автологіна, щоб можна було вибрати графічне середовище вручну.

Є ще один важливий момент. Напевно ви вже звернули увагу, що використовуються віртуальні термінали 5 і 6, а не 7, який йде за замовчуванням для xorg-сервера. Це пов'язано з тим, що якщо на клавіатурі другого робочого місця натиснути комбінацію клавіш Ctrl + c (досить поширена комбінація), то xorg на vt7 падає. Дуже неприємна особливість. Але вирішується простим змішуванням xorg з vt7 на будь-який інший vt.

Налаштування xorg. conf

Приступимо тепер до основної конфігурації, а саме задамо ті самі seat0 і seat1. Для цього нам знадобиться файл / etc / X11 / xorg. conf, якого у вас може і не бути, але його можна створити. Пишемо в нього такі рядки:

Section "ServerLayout"

Identifier "seat0"

Screen 0 "Screen0" 0 0

InputDevice "Mouse0" "CorePointer"

InputDevice "Keyboard0" "CoreKeyboard"

EndSection

Це означає, що ми визначили профіль seat0 екраном Screen0, мишкою Mouse0 і клавіатурою Keyboard0. Другий профіль визначається аналогічно:

Section "ServerLayout"

Identifier "seat1"

Screen 1 "Screen1" 0 0

InputDevice "Mouse1" "CorePointer"

InputDevice "Keyboard1" "CoreKeyboard"

EndSection

Вдумливий читач, напевно, вже задався питанням: "А що таке за Screen1, Mouse1, Keyboard1, Screen0, Mouse0, Keyboard0?" Ці пристрої визначаються в цьому ж файлі.

Section "InputDevice"

Identifier "Keyboard0"

Driver "evdev"

Option "Device" "/ dev / input / by-path / platform-i8042-serio-0-event-kbd"

Option "XkbModel" "pc105"

Option "XkbRules" "xorg"

Option "XkbLayout" "us, ru (winkeys)"

Option "XkbOptions" "grp: alt_shift_toggle, grp_led: scroll"

EndSection

У сучасному Linux за пристрої введення відповідає evdev, тому він вказується в якості драйвера. Один з найбільш складних етапів налаштування - це визначити ідентифікатор на ту саму клавіатуру, яка вам потрібна. Всі пристрої введення знаходяться в папці / dev / input /, де дублюються в папка by-path і by-id. Або ж є файли event0 - event5 для клавіатур. Вам потрібно вибрати одну з клавіатур, яка вам сподобається. Визначити правильність вибору досить просто: достатньо в консолі набрати sudo cat / dev / input / eventX, де Х - номер вашої клавіатури. При натисканні на клавішу цієї клавіатуру в консолі повинен з'явитися символ.

Кожен такий event те ж саме, що клавіатура в / dev / input / by-path / і / dev / input / by-id /. Так що робіть, так як вам зручніше. У мене дві різні клавіатури, тому мені зручніше орієнтуватися по моделям, але при однакових клавіатурах, напевно, зручніше буде працювати з event.

Опція «XkbModel» «pc105» говорить, що у нас буде стандартна 105-клавішна клавіатура. Опція «XkbLayout» «us, ru (winkeys)» додає дві розкладки: us і ru (англійську і російську).

Опція «XkbOptions» «grp: alt_shift_toggle, grp_led: scroll» означає, що перемикання розкладок здійснюється комбінацією alt + shift, і при російській розкладці буде горіти світлодіод scroll lock.

Для другої клавіатури все майже таке ж:

Section "InputDevice"

Identifier "Keyboard1"

Driver "evdev"

Option "Device" "/ dev / input / by-id / usb-Chicony_USB_Keyboard-event-kbd"

Option "XkbModel" "pc105"

Option "XkbRules" "xorg"

Option "XkbLayout" "us, ru (winkeys)"

Option "XkbOptions" "grp: alt_shift_toggle, grp_led: scroll"

Перейдемо до мишкам.

Section "InputDevice"

Identifier "Mouse0"

Driver "evdev"

Option Device "" / dev / input / by-id / usb-PIXART_USB_OPTICAL_MOUSE-event-mouse "

Option "GrabDevice" "on"

EndSection

Начебто все як в клавіатурі, але є опція Option «GrabDevice» «on», яка захоплює всі події від пристрою в монопольне використання. І опція Option «Buttons» «12», яка говорить, що у нашої мишки буде 12 клавіш.

Тепер екрани.

Section "Screen"

Identifier "Screen0"

EndSection

Визначаємо пристрій, до якого підключений екран (Device0) і, на всякіхй випадок, глибину кольору. Те ж робимо і з другим екраном.

Section "Screen"

Identifier "Screen1"

А ось і пристрої.

Section "Device"

Identifier "Device0"

Driver "radeon"

VendorName "ATI Technologies Inc"

BoardName "ATI 3100"

BusID "PCI: 1: 5: 0"

Option "Int10" "off"

EndSection

Ще раз звертаю увагу на драйвер «radeon». Ні в якому разі не пропріетарний драйвер ATI (про карти Nvidia сказати нічого не можу, але там ніби все навпаки). Трохи пізніше розповім докладніше, чому. BusID «PCI: 1: 5: 0» - ті самий цифри для даної відеокарти, отримані при команді lspci | grep VGA. Option «Int10» «off» відключає ініціалізацію відеокарти, використовуючи переривання BIOS. Ця опція обов'язкове. Без неї у вас нічого не вийде.

І для другої відеокарти.

Section "Device"

Identifier "Device1"

Driver "radeon"

VendorName "ATI Technologies Inc"

BoardName "ATI 2600"

BusID "PCI: 2: 0: 0"

Option "Int10" "off"

EndSection

Також в файлі xorg. conf необхідно вказати параметри сервера.

Section "ServerFlags"

Option "DefaultServerLayout" "seat0"

Option "AllowMouseOpenFail" "true"

Option "AutoAddDevices" "false"

Option "AllowEmptyInput" "false"

EndSection

Розглянемо всі опції:

«DefaultServerLayout» «seat0» - якщо раптом щось трапиться з kdm і xorg запуститься без параметрів, то сервера треба знати, яку конфігурацію завантажувати.

«AllowMouseOpenFail» «true» - навіть якщо мишки немає, то вважати мишку робочої і не бентежити сервер. По суті, наче й не повинно працюватиметься при використанні evdev. Можливо, більше не використовується. Але історично так вийшло :)

«AutoAddDevices» «false» - забороняє додавати пристрої автоматично, тільки ті, які прописані у файлі xorg. conf. А то прийде добрий чоловік і підключить мишку до комп'ютера, і, за логікою речей, вона з'явився на всіх робочих місцях і буде перебивати мишку, певну відповідному робочому столу. Нам такого не треба, тому і відключаємо. І нехай добра людина дивиться на мишку і думає: "Чого це вона не працює?" Нема чого НЕ уповноваженій особі встановлювати мишки в складні системи. Зламає ще чого :)

«AllowEmptyInput» «false» - не додає стандартний драйвера для мишки і клавіатури, якщо раптом ми забули прописати мишку та клавіатуру в xorg. conf.

Перший запуск

Ось перший етап і закінчений. Тепер можна перевантажуватися і, якщо все пройшло успішно, то ви побачите запрошення KDM на введення логіна і пароля. Залишається ввести логін і пароль, вибрати середу робочого стала, потім, якщо все добре, включити Автологін в файлі / etc / kde4 / kdm / kdmrc і налаштовувати систему далі :).

У мене завантаження графічних серверів виглядає наступним чином:

Така красива картинка отримана чудовою програмою bootchart. Ось повна версія графіка.

А зараз я розповім, чому не можна було ставити пропріетарний драйвер ATI. Цей драйвер дуже складно вмовити. Опцію - isolateDevice він сприймає дещо по-своєму. Довгий аналіз логів xorg-сервера показав, що відбувається приблизно така ситуація.

Запуск першого Х-сервера (xorg1), який запускає пропріетарний драйвер ATI (fglrx1).

Fglrx1 - вау, відеокарта, ух ти, вона мене влаштовує. Будемо з нею працювати.

Fglrx1 - вау, друга. Клас, хочу. Загалом, мені вона подобається, я її теж забираю.

Xorg1 - ок, працюємо.

Запуск другого Х-сервера (xorg2), який запускає пропріетарний драйвер ATI (fglrx2).

Fglrx2 - е-е-е, а де відеокарта? Нє, мужик, я не зрозумів, де відеокарта?

Fglrx2 - ну і сам працюй без відеокарти.

Xorg2 - еее... хто образив драйвер, чому він від мене пішов (тікаючи з компа)? Вернись, fglrx2, я все прощу.

З відкритим драйвером такого немає. Він відмінно розпізнає опцію запуску на окремому пристрої.

Продовжимо налаштування системи далі. Хоч все і працює, але завжди є багато дрібниць, які не помітних на перший погляд. Коли ми тільки бралися за настройку, ми і не могли навіть припустити, що в такій конфігурації комп'ютер відмовиться перезавантажуватися і вимикатися. Здавалося б, чому? А все через таких цікавих штук як ConsoleKit і PolicyKit. Інформації по ним не дуже багато, але все зводиться до того, що PolicyKit дозволяє непривілейованих процесів спілкуватися з привілейованими. Або, простіше кажучи, він контролює політику системи. У нашому випадку саме він і не дає вимкнути нам комп'ютер, тому що у нас немає прав на це. Інформацію для PolicyKit про те, хто ми, дає той самий ConsoleKit, і завдання цієї підсистеми відстежувати користувачів, їх сесії і ті самі сети. Тільки от невдача, в документації є дуже нехороша приписка: "True, hardware, multi-seat capabilities will be added in a later release". А ми хочемо multiseat вже зараз. Можна пропатчити ConsoleKit, але давайте трохи заглибимося і подивимося, чи можна обійтися без цього. При вході користувача в систему йому створюється сесія, причому сесія маркується як активна. А ось при одночасному вході двох користувачів (наш multiseat) їм створюється дві сесії, але ConsoleKit втрачається і робить їх неактивними. Подивитися поточні сесії можна, набравши в консолі команду ck-list-sessions.