# Посібник з менеджера дисплеїв середовища Gnome

## Терміни та домовленості використані у цьому посібнику

У посібнику описується менеджер дисплеїв середовища Gnome версії 2.26.0. Останній раз оновлювався 02 жовтня 2009 року.

Селектор - програма, що використовується для керування дисплеєм віддаленого вузла з приєднаного дисплея (`gdm-host-chooser`).

FreeDesktop — організація, яка надає стандарти стільничного середовища, зокрема специфікацію стільничних записів, яку використано у GDM. http://www.freedesktop.org.

GDM - менеджер дисплеїв середовища GNOME (Gnome Display Manager). Назва використовується при посиланні на програмний пакет взагалі.

Програма привітання - графічне вікно входу (його роботу забезпечує `gnome-shell`).

PAM - механізм модульної автентифікації

XDMCP - протокол керування дисплеєм X

Xserver — реалізація системи вікон X. Наприклад, Xorg з Xserver, який надається X.org Foundation http://www.x.org.

Шляхи, які починаються зі слова у кутових дужках, є відносними щодо префікса встановлення. Тобто `<share>/pixmaps/` позначає `/usr/share/pixmaps`, якщо GDM було налаштовано з `--prefix=/usr`.

## Огляд

### Введення

GDM - менеджер дисплею для GNOME, у якому реалізовано більшість функцій, що вимагаються для керування локальними та віддаленими дисплеями. GDM створено "з чистого аркуша" та він не містить оригінального коду XDM / X Consortium.

Зауважте, що GDM є придатним до налаштовування, а багато параметрів налаштувань стосуються захисту системи. Проблеми, на які слід звернути увагу, висвітлено у цьому документі.

Будь ласка, зверніть увагу на те, що у деяких операційних системах GDM налаштовано на поведінку, які відрізняється від типових значень, які описано у цьому документі. Якщо GDM поводить себе не так, як документовано, вам слід перевірити, чи відрізняються відповідні налаштування від описаних тут.

Щоб дізнатися більше про GDM, зверніться до сайта проєкту на http://wiki.gnome.org/Projects/GDM.

Якщо хочете обговорити щось щодо GDM або маєте запити щодо можливостей, надішліть повідомлення до списку листування

    gdm-list@gnome.org

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

Будь ласка, надсилайте усі звіти щодо вад і пропозиції щодо удосконалення до категорії «gdm» на сайті http://bugzilla.gnome.org.

### Стабільність інтерфейсу

У GDM 2.20 і попередніх версіях підтримувалася стабільність інтерфейсів налаштувань. Втім, у версії GDM 2.22 код було повністю переписано — його повну сумісність із попередніми версіями було втрачено. Почасти, причиною цього є те, що він працює інакше, отже деякі параметри втратили сенс, деякі ніколи не мали сенсу, а функціональні можливості, які було пов'язано із деякими параметрами, ще не було реалізовано.

Стабільними інтерфейсами, підтримку яких продовжено, є Init, PreSession, PostSession, PostLogin та скрипти Xsession. Продовжено підтримку деяких параметрів налаштувань у файлі `<etc>/gdm/custom.conf`. Крім того, продовжено підтримку `~/.dmrc` та каталогів зображень облич.

У GDM 2.20 та попередніх версіях було передбачено можливість керувати декількома дисплеями із окремими графічними картками, такими, які використовуються у середовищах термінальних серверів, вхід у вікні за допомогою програми, подібної до Xnest або Xephyr, програма gdmsetup, теми вітання на основі XML та можливість запускати засіб вибору XDMCP з вікна вітання. Ці можливості не було додано під час переписування у версії 2.22.

### Функціональний опис

GDM відповідає за керування дисплеями у системі. Це стосується розпізнавання користувачів, запуску сеансів користувачів та переривання сеансів користувачів. GDM можна налаштовувати. Способи налаштовування описано у розділі «Налаштовування GDM» цього документа. Крім того, у GDM передбачено засоби доступності для користувачів із обмеженими можливостями.

GDM надає можливість керувати дисплеєм головної консолі та дисплеями, які запущено за допомогою віртуальних терміналів. Його інтегровано із іншими програмами, зокрема Fast User Switch Applet (FUSA) та gnome-screensaver для керування декількома дисплеями на консолі за допомогою інтерфейсу віртуального термінала Xserver. Він також може керувати дисплеями XDMCP.

Незалежно від типу дисплея, GDM виконує описані такі дій при керуванні дисплеєм: запускає процес Xserver, далі запускає скрипт `Init` від імені користувача root і запускає програму вітання на дисплеї.

Програма вітання запускається від імені непривілейованих користувача і групи «gdm». Цього користувача і групу описано у розділі «Безпека» цього підручника. Основним призначенням програми вітання є надання механізму вибору облікового запису для входу до системи і ведення діалогу між користувачем і системою при розпізнаванні для входу до цього облікового запису. За процес розпізнавання відповідають вставні модулі розпізнавання (PAM). Модулі PAM визначають, які запити буде показано користувачеві для розпізнавання і чи взагалі буде показано якісь запити. У типовій системі програма вітання попросить ввести для розпізнавання ім'я користувача і пароль. Втім, деякі системи може бути налаштовано на використання додаткових механізмів, зокрема відбитків пальців або карток SmartCard. GDM може бути налаштовано на підтримку цих альтернатив паралельно до розширень входу до системи програми вітання за допомогою параметра `--enable-split-authentication` скрипту `./configure` або одного зі способів за допомогою налаштувань загальносистемних PAM.

Розширення для роботи зі смарт-картками можна увімкнути або вимкнути за допомогою ключа gsettings `org.gnome.display-manager.extensions.smartcard.active`.

Так само, розширення для роботи із відбитками пальців можна увімкнути або вимкнути за допомогою ключа gsettings `orggnome.display-manager.extensions.fingerprint.active`.

GDM і PAM можна налаштувати так, щоб вхід до системи не обумовлювався ніякими діями користувача, тобто GDM виконував автоматичних вхід до системи і просто розпочинав сеанс — це може бути корисним для деяких середових, зокрема систем із одним користувачем або електронних кіосків.

Окрім розпізнавання, програма вітання надає користувачеві можливість вибрати, який з сеансів слід розпочати і якою мовою інтерфейсу слід користуватися. Сеанси визначаються файлами із суфіксом назви .desktop. Докладніші відомості щодо цих файлів можна знайти у розділі «Налаштовування сеансу користувача і мови GDM» цього підручника. Типово, GDM налаштовано на показ навігатора обличчями, за допомогою якого користувач може вибрати свій обліковий запис натисканням зображення, замість введення свого імені користувача. GDM стежить за типовим сеансом і мовою інтерфейсу користувача за допомогою файла `~/.dmrc` і використає типові значення, якщо користувач не вибере сеансу або мови у графічному інтерфейсі для входу до системи.

Після розпізнавання користувача фонова служба запускає скрипт `PostLogin` від імені користувача root, потім запускає скрипт `PreSession` від імені користувача root. Після завершення роботи цих скриптів буде запущено сеанс користувача. Якщо користувач вийде з сеансу, буде запущено скрипт `PostSession` від імені користувача root. Це скрипти призначено для налаштовування авторами дистрибутивів та кінцевими користувачами керування сеансами. Наприклад, за допомогою цих скриптів ви можете налаштувати машину, яка створюватиме «на льоту» каталог користувача $HOME і витиратиме його після виходу з системи.. Різниця між скриптами `PostLogin` і `PreSession` полягає у тому, що `PostLogin` запускається до виклику pam_open_session, тому це саме те місце, у якому слід визначати усе, що має бути запущено до того, як буде ініціалізовано сеанс користувача. Скрипт `PreSession` буде викликано після ініціалізації сеансу.

### Панель вітання

Програма вітання GDM показує панель, яку пришвартовано у нижній частині екрана і яка надає у ваше розпорядження додаткові функціональні можливості. Якщо вибрано користувача, панель надає змогу користувачеві вибрати, який сеанс, мову і розкладку клавіатури слід використовувати після входу до системи. Засіб вибору розкладки клавіатури змінює розкладку, у якій вводитиметься ваш пароль. Крім того, на панелі міститься область для служб входу до системи, де вони можуть розташовувати піктограми стану. Прикладами піктограм стану є піктограма акумулятора для показу поточного стану заряду акумулятора та піктограма для вмикання можливостей доступності. Також програма вітання забезпечує роботу кнопок, за допомогою яких користувач може вимикати або перезапускати систему. GDM можна налаштувати так, щоб кнопки вимикання і перезапуску не було показано, якщо ви так хочете. Крім того, GDM можна налаштувати з використанням PolicyKit (або RBAC у Oracle Solaris) так, щоб програма вимагала від користувача належного уповноваження у системі, перш ніж приймати запит щодо вимикання або перезапуску.

Зауважте, що можливості розкладки клавіатури доступі лише у системах із підтримкою libxklavier.

### Спеціальні можливості

У GDM передбачено підтримку «Доступного входу», за допомогою якого користувачі можуть входити до сеансу стільничного середовища, навіть якщо їм непросто користуватися екраном, мишею або клавіатурою у звичайний спосіб. Можна скористатися можливостям доступних технологій, зокрема екранною клавіатура, засобом читання з екрана, екранною лупа та засобами доступності клавіатури AccessX Xserver. Також можна увімкнути збільшення тексту або висококонтрастні піктограми та засоби керування, якщо потрібно. Зверніться до розділу «Налаштовування доступності» цього підручника, щоб дізнатися більше про різноманітні можливості доступності, які можна налаштувати.

У деяких операційних системах слід переконатися, що користувач GDM є учасником групи «audio», щоб програми доступності, які потребують виведення звукових даних (зокрема програми озвучення тексту) могли працювати належним чином.

### Переглядач портретів GDM

Переглядач портретів — інтерфейс, за допомогою якого користувачі можуть вибирати обліковий запис клацанням на зображенні. Цю можливість можна увімкнути або вимкнути за допомогою ключа GSettings org.gnome.login-screen disable-user-list. Типово, її увімкнено. Якщо можливість вимкнено, користувачам доведеться вводити ім'я користувача повністю вручну. Якщо можливість увімкнено, буде показано список усіх локальних користувачів, від імені яких можна увійти до системи (усіх облікових записів користувачів, які визначено у файлі /etc/passwd, які мають коректний запис оболонки і достатньо велике значення UID), і віддалених користувачів, які нещодавно входили до системи. Переглядач портретів у GDM 2.20 та попередніх версіях намагався показати усіх віддалених користувачів, що спричиняло проблеми зі швидкодією у великих промислових конфігураціях.

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

У Переглядачі портретів передбачено підтримку «випереджального пошуку під час введення» — алгоритму, який динамічно переводить позначення зображення паралельно із введенням користувачем відповідного імені користувача зі списку. Це означає, що користувач із довгим іменем може ввести лише декілька перших літер у назві облікового запису, а програма автоматично вибере належний пункт у списку.

Піктограми, які використовуються у GDM може бути встановлено на загальносистемному рівні адміністратором системи або може бути знайдено у домашніх каталогах користувачів. Якщо піктограми встановлено на загальносистемному рівні, вони зберігатимуться у каталозі `<share>/pixmaps/faces/` під назвами, які збігаються із назвами облікових записів користувачів. Файли зображень облич мають бути звичайними зображеннями, які може читати GTK+, зокрема PNG або JPEG. Піктограми облич з загальносистемного каталогу облич мають бути придатними до читання користувачем GDM.

Якщо для користувача не буде знайдено загальносистемної піктограми, GDM виконає пошук файла зображення піктограми у каталозі $HOME користувача. Спочатку GDM шукатиме зображення обличчя користувача у `~/.face`. Якщо зображення не буде знайдено, програма спробує знайти його у `~/.face.icon`. Якщо і там зображення не буде знайдено, буде використано значення, яке визначено для «face/picture=» у файлі `~/.gnome2/gdm`.

Якщо для користувача не визначено зображення обличчя, GDM скористається піктограмою «stock_person», яку визначено у поточній темі GTK+. Якщо таке зображення не визначено, програма скористається резервним типовим зображенням обличчя.

Будь ласка, зауважте, що завантаження і масштабування піктограм облич, які зберігаються у віддалених домашніх каталогах користувачів є доволі витратним з точки зору часу. Оскільки завантаження зображень за допомогою NIS або NFS не є доцільним, GDM не робитиме спроб завантажити зображення облич з віддалених домашніх каталогів.

Якщо переглядач увімкнено, коректні імена користувачів комп'ютера буде показано будь-кому. Якщо увімкнено XDMCP, імена користувачів буде показано віддаленим користувачам. Це, звичайно ж, дещо послаблює захист системи, оскільки зловмиснику не доведеться вгадувати коректні імена користувачів системи. У деяких середовищах із суворими правилами безпеки переглядач портретів може бути неприйнятним до використання.

### XDMCP

Фонову службу GDM можна налаштувати на очікування та керування запитами X Display Manage Protocol (XDMCP) з віддалених комп'ютерів. Типово, підтримку XDMCP вимкнено, але, якщо потрібно, її можна увімкнути. Якщо GDM зібрано із підтримкою обгортки TCP, фонова служба надаватиме доступ лише вузлам, які вказано у розділі служби GDM у файлі налаштувань обгорток TCP.

GDM включає декілька заходів, які роблять його більш стійким до атак типу «відмова у обслуговуванні» на службу XDMCP. Можна налаштувати значну кількість параметрів протоколу, час очікування з'єднання тощо. Типові налаштування мають добре працювати у більшості систем.

Типово, GDM очікує на запити XDMCP на звичайному порту UDP, який використовується для XDMCP, порту 177, і відповідає на запити QUERY і BROADCAST_QUERY надсиланням пакета WILLING на комп'ютер, з якого походить запит.

GDM можна налаштувати на обробку INDIRECT запитів та відображення селектора вузлів на віддаленому дисплеї. GDM запам'ятовує вибір користувача та пересилає наступні запити вибраному менеджеру. GDM також підтримує розширення до протоколу, яке змушує забути про перенаправлення одразу після успішного з'єднання користувача. Це розширення підтримується якщо з обох сторін сервери GDM. Розширення прозоре і ігнорується XDM та іншими серверами, що підтримують XDMCP.

Якщо XDMCP не працює, переконайтеся, що усі адреси вказано у `/etc/hosts`.

Зверніться до розділу «Безпека», щоб дізнатися більше про проблеми захисту при використанні XDMCP.

### Реєстрація подій

Для записування повідомлень щодо помилок і стану GDM використовує системний журнал (syslog). Крім того, програма може записувати діагностичний журнал, який може стати у пригоді для визначення причин проблем із неналежною роботою GDM. Увімкнути виведення діагностичних даних можна встановленням значення «true» для ключа debug/Enable у файлі `<etc>/gdm/custom.conf`.

Виведені різноманітними серверами X дані зберігаються у каталозі журналу GDM, яким зазвичай є `<var>/log/gdm/`. Усі повідомлення сервера X зберігаються у файлі, який пов'язано зі значенням назви дисплея, `<дисплей>.log`.

Дані, виведені сеансом, передаються каналом крізь фонову службу GDM до файла `~/`$XDG_CACHE_HOME`/gdm/session.log`, яким зазвичай є файл `~/.cache/gdm/session.log`. Файл перезаписується під час кожного входу до системи, отже вихід і вхід до того самого облікового запису за допомогою GDM призведе до втрати усіх повідомлень з попереднього сеансу.

Зауважте, що якщо GDM з якоїсь причини не вдасться створити цей файл, буде створено файл із резервною назвою `~/`$XDG_CACHE_HOME`/gdm/session.log.XXXXXXXX`, де `XXXXXXXX` — якісь випадкові символи.

### Швидке перемикання користувачів

GDM уможливлює одночасну роботу у системі декількох користувачів. Після входу до системи одного користувача додаткові користувачі можуть увійти за допомогою механізму перемикання користувачів з панелі GNOME або після натискання кнопки «Перемкнути користувача» у вікні блокування екрана засобу збереження екрана GNOME. Змінити активний сеанс можна за допомогою цього ж механізму. Зауважте, що у деяких дистрибутивах кнопку перемикання користувачів не додають до типової панелі. Додати цю кнопку можна за допомогою контекстного меню панелі.

Зауважте, що доступ до цієї можливості надається у системах, де є підтримка віртуальних терміналів. Цією можливістю не можна буде скористатися, якщо у системі не реалізовано підтримку віртуальних терміналів.

## Безпека

### Користувач і група GDM

З міркувань безпеки, для належної роботи рекомендуємо створити спеціалізовані ідентифікатори користувача і групи. У більшості системи цим користувачем і групою є «gdm», але можна вказати будь-якого користувача і будь-яку групу. Усі програми GDM із графічним інтерфейсом буде запущено від імені цього користувача — усі програми, які взаємодіятимуть із користувачем буде запущено у певній «пісочниці». Відповідний користувач та група повинні мати доволі обмежені права доступу.

Єдиними особливими правами доступу, які потрібні для роботи користувача «gdm», є можливості читання файлів Xauth з каталогу `<var>/run/gdm` і запису файлів до цього каталогу. Каталог `<var>/run/gdm` повинен належати користувачеві і групі root:gdm і мати права доступу 1777.

За жодних обставин не налаштовуйте для користувача і групи GDM значення запису користувача, доступ до даних якого просто набути, зокрема користувача `nobody`. Будь-який користувач, який отримає доступ до ключа Xauth, може проникнути до системи і керувати запущеними програмами з графічним інтерфейсом, які запущено у пов'язаному сеансі або виконати атаку, метою якої є приведення системи у недієздатний стан. Важливо налаштувати систему належним чином, щоб до цих файлів мав доступу лише користувач «gdm», і утруднити вхід до системи з цього облікового запису. Наприклад, обліковий запис можна налаштувати так, щоб у нього не було пароля, і заборонити користувачам, відмінним від root, входити до облікового запису.

Налаштування програми вітання GDM зберігаються у GConf. Щоб користувач GDM міг записувати налаштування, користувач «gdm» повинен мати придатний до запису каталог $HOME. Користувачі можуть вказати типові налаштування GConf бажаним чином, щоб уникнути потреби у наданні користувачеві «gdm» придатного до запису каталогу $HOME. Втім, деякі можливості GDM може бути вимкнено, якщо програм не зможе записувати дані щодо стану до налаштувань GConf.

### PAM

GDM використовує для розпізнавання при вході PAM. PAM є абревіатурою від Pluggable Authentication Module («вставний модуль розпізнавання»). Ця система використовується у більшості програм, робота яких потребує розпізнавання на вашому комп'ютері. Система надає можливість адміністратору налаштувати специфічну поведінку розпізнавання для різних програм для входу до системи (зокрема ssh, графічної оболонки входу до системи, зберігача екрана тощо).

PAM є складною і гнучкою у налаштуваннях системою — цю документацію не призначено для докладного її опису. Замість цього, ми обмежимося оглядом зв'язку налаштувань PAM із GDM, того, як PAM типово налаштовано для роботи з GDM, та відомих проблем. Ми очікуємо, що ті, хто хоче налаштувати PAM, ознайомляться із документацією до PAM для того, щоб зрозуміти, як налаштувати PAM, і ознайомитися із значенням термінів, які використано у цьому розділі.

Налаштування PAM мають різні, але подібні, інтерфейси на різних операційних системах, тому вам слід ознайомитися із сторінкою підручника (man) pam.d or pam.conf, щоб дізнатися більше. Прочитайте документацію з PAM і ознайомитеся із даними щодо зв'язку захисту системи із змінами, які ви маєте намір внести до налаштувань.

Зауважте, що, типово, GDM використовує назву служби PAM «gdm» для звичайного входу до системи і назву служби PAM «gdm-autologin» для автоматичного входу системи. Ці служби не можна визначати у вашому pam.d або налаштованому файлі pam.conf. Якщо не буде запису, GDM використовуватиме типову поведінку PAM. У більшості систем усе в такому випадку працюватиме як слід. Втім, можливість автоматичного входу може не працювати, якщо службу gdm-autologin не буде визначено.

Скрипт `PostLogin` запускається перед викликом pam_open_session, а скрипт `PreSession` запускається після нього. Це надає змогу системному адміністратору додати будь-які скриптові дії до процесу входу до системи до або після того, як PAM ініціалізує сеанс.

Якщо ви хочете зробити так, щоб GDM працював із іншими типами механізмів розпізнавання (зокрема відбитками пальців або інструментарієм для читання SmartCard), вам слід реалізувати це використанням модуля служби PAM для бажаного типу розпізнавання, а не намагатися модифікувати код GDM безпосередньо. Зверніться до документації з PAM у вашій системі. Способи досягти цього часто обговорюються у списку листування

    gdm-list@gnome.org

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

У PAM є деякі обмеження щодо можливості працювати зі декількома типами розпізнавання одночасно, зокрема підтримкою одночасної можливості приймати одночасно смарт-картку та можливості вводити ім'я користувача і пароль у програмі для входу до системи. Існують методики забезпечення працездатності таких схем, тому варто ознайомитися із типовими рішенням проблеми, якщо ви маєте намір скористатися подібними конфігураціями.

Якщо у системі не працює автоматичний вхід, перевірте, чи визначено стек PAM «gdm-autologin» у налаштуваннях PAM. Щоб це спрацювало, необхідно скористатися модулем PAM, який просто не виконує розпізнавання або який просто повертає PAM_SUCCESS для усіх його загальнодоступних інтерфейсів. Припускаючи, що у вашій системі є модуль PAM pam_allow.so, який виконує це завдання, налаштування PAM для уможливлення роботи «gdm-autologin» мають виглядати якось так:

           gdm-autologin auth  required    pam_unix_cred.so.1
           gdm-autologin auth  sufficient  pam_allow.so.1
           gdm-autologin account  sufficient  pam_allow.so.1
           gdm-autologin session  sufficient  pam_allow.so.1
           gdm-autologin password  sufficient  pam_allow.so.1

Якщо скористатися наведеними вище налаштуваннями, запис lastlog не буде створено. Якщо вам потрібен запис lastlog, скористайтеся таким для сеансу:

           gdm-autologin session required pam_unix_session.so.1

Якщо комп'ютером користуються декілька осіб, що робить автоматичний вхід до системи непридатним, може виникнути потреба у забезпеченні входу до облікових записів деяких користувачів без введення пароля. Цю можливість можна увімкнути на рівні параметра запису користувача за допомогою програми users-admin з пакунка gnome-system-tools. Досягти потрібного результату можна перевіркою того, чи є користувач учасником групи Unix із назвою «nopasswdlogin» перед тим, як йому буде надіслано запит щодо пароля. Щоб це спрацювало, файл налаштувань PAM для служби «gdm» має включати рядок, подібний до такого:

          gdm auth  sufficient  pam_succeed_if.so  user ingroup nopasswdlogin

### utmp і wtmp

GDM створює записи бази даних обліку користувачів utmp і wtmp під час входу і виходу з сеансу. База даних utmp містить дані щодо доступу користувачів та облікові дані, доступ до яких можна отримати за допомогою команд, подібних до `finger`, `last`, `login` і `who`. База даних wtmp містить журнал усіх дій з доступу користувачів та облікові дані з бази даних utmp. Зверніться до сторінок підручника (man) utmp і wtmp у вашій системі, щоб дізнатися більше.

### Схема аутентифікації X-серверів

Файл уповноваження сервера X під час запуску зберігаються у новоствореному каталозі `<var>/run/gdm`. Ці файли використовуються для зберігання і спільного використання «пароля» між клієнтами X і сервером X. Цей «пароль» є унікальним для кожного сеансу входу до системи, тому користувачі з одного сеансу не можуть проникнути до сеансів інших користувачів зі свого сеансу.

GDM підтримує лише систему автентифікації MIT-MAGIC-COOKIE-1. Зазвичай від інших схем користі не набагато більше, тому до цих пір не було вжито зусиль для їх реалізації. При використанні XDMCP слід бути особливо обережним, тому що cookie передаються по мережі у незмінному вигляді. Якщо можливе прослуховування лінії зв'язку, тоді нападник може просто отримати ваш пароль під час реєстрації, незалежно від схеми автентифікації. Якщо прослуховування можливе але небажане, тоді використовуйте ssh для тунелювання X з'єднань, замість використання XDMCP. Ви можете розглядати XDMCP як графічний telnet, який має ті ж самі властивості безпеки. У більшості випадків слід надавати перевагу ssh -Y перед можливостями XDMCP GDM.

### Безпека XDCMP

Хоча ваш дисплей захищено куками, XEvents і, отже, натискання клавіш при введенні паролів проходять крізь дроти з'єднання апаратури без шифрування. Доволі просто перехопити ці дані.

Головним чином XDMCP використовується для тонких клієнтів у лабораторних умовах. Цім тонким клієнтам для доступу до сервера необхідна лише мережа, та, здається, найкращою політикою безпеки буде тримати їх у окремій мережі, до якої неможливо отримати доступ із зовнішнього світу, а зв'язок є лише з сервером. Єдиною точкою доступу до зовнішнього світу повинен бути сервер. У цьому типі налаштувань ніколи не слід використовувати некерований концентратор або іншу придатну до вивчення ззовні мережу.

### Контроль доступу XDMCP

Керування доступом XDMCP виконується за допомогою обгорток TCP. Можна зібрати GDM без підтримки обгортки TCP, тому у деяких операційних системах підтримки цієї можливості не передбачено.

Вам слід використовувати назву фонової служби `gdm` у файлах `<etc>/hosts.allow` та `<etc>hosts.deny`. Наприклад, щоб заборонити доступ комп'ютерам з `.evil.domain` додайте

    gdm: .evil.domain

у файл `<etc>/hosts.deny`. Також можна додати

    gdm: .your.domain

у файл `<etc>/hosts.allow`, якщо ви вимикаєте усі служби з усіх вузлів. Докладнішу інформацію дивіться у man-сторінці hosts.allow(5).

### Захист брандмауером

Хоча GDM намагається ввести в оману потенційних нападників, рекомендується блокувати XDMCP (UDP порт 177) на вашому брандмауері, якщо він вам не потрібен. GDM протидіє DoS атакам (атаки типу відмови у обслуговуванні), але X протоколу властиві успадковані вади безпеки, тому його слід використовувати у контрольованому оточенні. Також кожне віддалене з'єднання споживає багато ресурсів, тому набагато простіше викликати відмову обслуговування XDMCP сервера, ніж, скажімо, у веб-сервера.

Також буде розумно блокувати на брандмауері всі порти X сервера (TCP порт 6000 + номер дисплею). Зауважте, що різні частини GDM використовують дисплеї з номером 20 та більше (наприклад, при запуску серверів за вимогою).

X не є дуже безпечним протоколом, якщо користуватися ним для зв'язку інтернетом, а XDMCP є ще менш безпечним протоколом.

### PolicyKit

GDM можна налаштувати на використання PolicyKit для уможливлення для системних адміністраторів керувати тим, чи надаватиме вікно входу до системи доступ до кнопок вимикання та перезапуску системи у вікні програми вітання.

Ці кнопки керуються, відповідно, діями `org.freedesktop.consolekit.system.stop-multiple-users` і `org.freedesktop.consolekit.system.restart-multiple-users`. Правила для цих дій можна налаштувати за допомогою програми polkit-gnome-authorization або інструмента командного рядка polkit-auth.

### RBAC (Role Based Access Control)

GDM можна налаштувати на використання RBAC замість PolicyKit. У цьому випадку для уможливлення для системних адміністраторів керувати тим, чи надаватиме вікно входу до системи доступ до кнопок вимикання та перезапуску системи у вікні програми вітання, буде використано RBAC.

Наприклад, у Oracle Solaris для керування цим використовується уповноваження «solaris.system.shutdown». Просто внесіть зміни до файла `/etc/user_attr` так, щоб користувач «gdm» мав відповідне уповноваження.

## Підтримка ConsoleKit

До GDM включено підтримку оприлюднення даних щодо входу користувачів та обліку сеансів у форматі бібліотеки, яка має назву ConsoleKit. ConsoleKit може стежити за усіма користувачами, які працюють у системі. У цьому сенсі нею можна скористатися як замінником файлів utmp і utmpx, які доступні у більшості Unix-подібних операційних системах.

Коли GDM збирається створити процес входу до системи для користувача, програма викликає привілейований метод ConsoleKit з метою відкрити новий сеанс для цього користувача. На цей момент GDM також надає ConsoleKit відомості щодо цього сеанс користувача, зокрема такі: ідентифікатор користувача, показане ім'я X11, які буде пов'язано із сеансом, назву вузла, з якого походить сеанс (корисно у випадку сеансу XDMCP), чи є сеанс долученим тощо. Як елемент, який ініціює процес користувача, GDM перебуває в унікальному стані щодо визначення параметрів сеансу користувача і довіри для надання цієї частини даних. Використання цього привілейованого методу обмежено використанням правил безпеки каналу системних повідомлень D-Bus.

Якщо користувач із наявним сеансом пройшов розпізнавання у GDM і надсилає запити щодо поновлення наявного сеансу, GDM викликає привілейований метод ConsoleKit для розблокування сеансу. Дії, які відбуваються, коли сеанс отримує цей сигнал розблокування, не визначено точно — вони залежать від сеансу. Втім, у більшості сеансів відбувається розблокування зберігача екрана.

Якщо користувач виходить з облікового запису або якщо GDM або сеанс несподівано завершує роботу, реєстрацію сеансу користувача у ConsoleKit буде скасовано.

## Налаштовування

У GDM передбачено декілька інтерфейсів налаштовування. Серед них точки інтеграції скриптів, налаштовування фонових служб, налаштовування програми вітання, загальні параметри сеансу, налаштовування інтеграції gnome-settings-daemon та налаштовування сеансу. Ці типи інтеграції докладно описано нижче.

### Точки інтеграції скриптів

Точки інтеграції скриптів GDM можна знайти у каталозі `<etc>/gdm/`:

    Xsession
    Init/
    PostLogin/
    PreSession/
    PostSession/

Усі скрипти, `Init`, `PostLogin`, `PreSession` і `PostSession`, працюють у описаний нижче спосіб.

Для кожного типу скриптів типовим, тим, який буде виконано, буде той, який називається «Default» і який зберігається у каталозі, пов'язаному із типом скрипту. Отже, типовим скриптом `Init` є `<etc>/gdm/Init/Default`. Можна створити окремий скрипт для дисплея, і, якщо він існує, його буде запущено замість типового скрипту. Такі скрипти зберігаються у тому самому каталозі, що і типовий скрипт, і мають таку саму назву, як значення змінної DISPLAY у сервері X для відповідного дисплея. Наприклад, якщо існує скрипт `<Init>/:0`, його буде запущено для DISPLAY ":0".

Усі ці скрипти запускаються із правами доступу root і повертають 0, якщо їх виконано успішно, і ненульовий код повернення, якщо станеться якась помилка, яка спричинила переривання сеансу входу до системи. Також зауважте, що GDM блокуватиметься, аж доки скрипти не завершать роботу. Тому, якщо якийсь з цих скриптів повисне, це спричинить зависання процесу входу до системи.

Коли сервер X для графічного інтерфейсу входу до системи вже запущено, але перед тим, як графічний інтерфейс входу буде показано, GDM запустить скрипт `Init`. Цей скрипт є корисним для запуску програм, які має бути запущено, доки відбувається показ вікна входу до системи, або виконання будь-якої спеціалізованої ініціалізації, якщо вона потрібна.

Після того, як користувача буде успішно розпізнано, GDM запустить скрипт `PostLogin`. Це завдання виконується перед налаштовуванням будь-якого сеансу, зокрема перед викликом pam_open_session. Цей скрипт корисний для виконання будь-якої ініціалізації сеансу, яку має бути виконано перед його запуском. Наприклад, ви можете налаштувати каталог $HOME користувача, якщо у цьому є потреба.

Після ініціалізації сеансу користувача GDM запустить скрипт `PreSession`. Цей скрипт корисний для виконання будь-якої ініціалізації сеансу, яку має бути виконано після того, як сеанс було ініціалізовано. Цим можна скористатися, наприклад, для керування сеансом або ведення обліку.

Якщо користувач перериває свій сеанс, GDM запускає скрипт `PostSession`. Зауважте, що роботу сервера X на момент запуску цього скрипту буде припинено, тому до нього не буде доступу.

Зверніть увагу, сценарій `PostSession` запускається навіть якщо дисплей завершився аварійно через помилку вводу/виводу або щось подібне. Тому, не гарантується, що X-програми працюватимуть при його виконанні.

Усі згадані вище скрипти встановлюють для змінної середовища `$RUNNING_UNDER_GDM` значення `yes`. Якщо скрипти використовуються спільно із іншими програмами для керування дисплеєм, ця змінна надає вам змогу визначити, що скрипти викликає GDM, отже, ви можете наказувати системі виконувати певний код, якщо використано GDM.

### Налаштовування автозапуску

У каталозі `<share>/gdm/autostart/LoginWindow` містяться файли у форматі, який визначається «FreeDesktop.org Desktop Application Autostart Specification». Стандартними можливостями з цієї специфікації можна скористатися для визначення програм, які має бути автоматично перезапущено або запущено, лише якщо встановлено значення налаштування GConf тощо.

Буд-які файли `.desktop` у цьому каталозі спричинятимуть автоматичний запуск відповідної програми одночасно із графічним інтерфейсом програми входу до системи. Типово, GDM постачається із файлами, які автоматично запускають сам графічний інтерфейс входу до системи gdm-simple-greeter, програму gnome-power-manager, фонову службу gnome-settings-daemon та програму для керування вікнами metacity. Ці програми потрібні для забезпечення працездатності програми вітання. Крім того, передбачено файли desktop для запуску різноманітних засобів технологій доступності, якщо вказано відповідні значення параметрів налаштувань у розділі налаштовування доступності, описаному нижче.

### Скрипт Xsession

Також передбачено скрипт `Xsession`, який зберігається у каталозі `<etc>/gdm/Xsession` і викликається між скриптом `PreSession` і скриптом `PostSession`. У цьому скрипті не передбачено підтримки роботи із окремими дисплеями, подібно до інших скриптів. Цей скрипт використовується для самого запуску сеансу користувача. Скрипт запускається від імені користувача і працюватиме незалежно від сеансу, який було вказано за допомогою файла стільничного сеансу, вибраного користувачем при запуску.

### Конфігурація сервера

Налаштовування фонової служби GDM виконується за допомогою файла `<etc>/gdm/custom.conf`. Типові значення зберігаються у GConf у файлі `gdm.schemas`. Рекомендуємо кінцевим користувачам вносити зміни до файла `<etc>/gdm/custom.conf`, оскільки файл бази даних параметрів може бути перезаписано при оновленні користувачем системи з метою встановлення новішої версії GDM.

Зауважте, що у застарілих версіях GDM було передбачено додаткові параметри налаштувань, підтримку яких у найновіших версіях GDM не реалізовано.

Файл `<etc>/gdm/custom.conf` має синтаксис `keyfile`. Ключові слова у дужках визначають розділи груп, рядки перед знаком «дорівнює» (=) є ключами, а дані після знаку тотожності є їх значеннями. Порожні рядки або рядки, що починаються зі знаку (#) ігноруються.

У файлі `<etc>/gdm/custom.conf` передбачено підтримку розділів груп «[daemon]», «[security]» та «[xdmcp]». У кожній групі записують певні пари ключ-значення, якими можна скористатися для зміни поведінки GDM. Наприклад, щоб увімкнути відкладений вхід і вказати користувача, для якого виконуватиметься цей відкладений вхід, як «you», вам слід внести зміни до цього файла так, щоб у ньому містилися такі рядки:

    [daemon]
    TimedLoginEnable=true
    TimedLogin=you

Нижче наведено повний список підтримуваних ключів налаштувань:

#### [chooser]

Multicast

-     Multicast=false

  Якщо має значення true та увімкнено IPv6, селектор буде надсилати multicast-запити у локальну мережу та слухати відповідь від вузлів, які входять у multicast-групу.

MulticastAddr

-     MulticastAddr=ff02::1

  У цьому параметрі вказується multicast.

#### [daemon]

TimedLoginEnable

-     TimedLoginEnable=false

  Чи має запускатись сеанс користувача, вказаного у параметрі `TimedLogin`, після певної кількості секунд (у параметрі `TimedLoginDelay`) відсутності активності у вікні входу. Використовується для терміналів загального доступу або навіть у домашньому використанні. Якщо користувач використовує клавіатуру або переглядає меню, відлік часу скидається на `TimedLoginDelay` або 30 секунд, в залежності від того яке значення більше. Якщо користувач не ввів ім'я а просто натиснув на клавішу ENTER, тоді GDM вважає що користувач бажає негайно увійти з іменем користувача відкладеного входу. Зауважте, при цьому не запитується пароль, тож будьте обережні, хоча при використанні PAM можна налаштувати запит паролю перш, ніж дозволити вхід. Зверніться до розділу «Безпека->PAM» підручника, щоб дізнатися більше, або за додатковими відомостями, якщо ця можливість не працює.

TimedLogin

-     TimedLogin=

  Це назва облікового запису користувача, якого має бути впущено до системи після вказаної кількості секунд бездіяльності.

  Якщо значення завершуватиметься вертикальною рискою | (символом каналу), GDM виконає вказану програму і використає будь-яке повернуте нею до стандартного виведення значення як назву облікового запису користувача. Програму буде запущено із встановленою змінною середовища DISPLAY, тому можна вказати окремого користувача для окремого дисплея. Наприклад, якщо значенням є «/usr/bin/getloginuser|», буде запущено програму «/usr/bin/getloginuser» для отримання значення назви облікового запису користувача.

TimedLoginDelay

-     TimedLoginDelay=30

  Затримка у секундах, перш ніж користувача `TimedLogin` буде впущено до системи.

AutomaticLoginEnable

-     AutomaticLoginEnable=false

  Якщо вказано значення «true», користувача, якого вказано в `AutomaticLogin`, має бути впущено до системи негайно. Ця можливість рівноцінна відкладеному входу із затримкою у 0 секунд.

AutomaticLogin

-     AutomaticLogin=

  Це назва облікового запису користувача, якого має бути впущено до системи негайно, якщо `AutomaticLoginEnable` дорівнює «true».

  Якщо значення завершуватиметься вертикальною рискою | (символом каналу), GDM виконає вказану програму і використає будь-яке повернуте нею до стандартного виведення значення як назву облікового запису користувача. Програму буде запущено із встановленою змінною середовища DISPLAY, тому можна вказати окремого користувача для окремого дисплея. Наприклад, якщо значенням є «/usr/bin/getloginuser|», буде запущено програму «/usr/bin/getloginuser» для отримання значення назви облікового запису користувача.

User

-     User=gdm

  Ім'я користувача, від імені якого буде запущено програму вітання та інші програми із графічним інтерфейсом. Зверніться до опису ключа налаштувань `Group` та до розділу «Захист->Користувач і група GDM» цього документа, щоб дізнатися більше.

Group

-     Group=gdm

  Назва групи, від імені якої буде запущено програму вітання та інші програми із графічним інтерфейсом. Зверніться до опису ключа налаштувань `User` та до розділу «Захист->Користувач і група GDM» цього документа, щоб дізнатися більше.

#### Параметри налагоджування

#### [debug]

Enable

-     Enable=false

  Щоб увімнути діагностику, встановіть для ключа debug/Enable значення «true» у файлі `<etc>/gdm/custom.conf` і перезапустіть GDM. Виведені діагностичні дані буде надіслано до файла журналу системи (`<var>/log/messages` або `<var>/adm/messages`, залежно від вашої операційної системи).

#### Параметри програми привітання

#### [greeter]

IncludeAll

-     IncludeAll=true

  Якщо має значення «true», переглядач портретів показуватиме усіх користувачів локальної системи. Якщо має значення «false», переглядач портретів показуватиме лише користувачів, які нещодавно входили до системи.

  Якщо значенням цього ключа є «true», GDM викличе fgetpwent() для отримання списку локальних користувачів системи. Усіх користувачів із ідентифікатором користувача, який є меншим за 500 (або 100, якщо працюємо у Oracle Solaris), буде відфільтровано. Переглядач портретів також показуватиме усіх користувачів, які раніше входили до системи (наприклад, користувачів NIS/LDAP). Він отримуватиме цей список шляхом виклику інтерфейсу `ck-history` ConsoleKit. Він також відфільтровуватиме усіх користувачів, у яких немає належної командної оболонки (коректними вважаються усі оболонки, які повертає getusershell() — /sbin/nologin або /bin/false не вважаються некоректними, якщо їх повертає getusershell()).

  Якщо має значення «false», GDM показуватиме лише користувачів, які раніше входили до цієї системи (локальних або користувачів NIS/LDAP) за допомогою виклику інтерфейсу `ck-history` ConsoleKit.

Include

-     Include=

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

Exclude

-     Exclude=bin,root,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,nobody4,noaccess,postgres,pvm,rpm,nfsnobody,pcap

  Встановлюється у значення списку користувачів, яких завжди слід виключати з переглядача портретів. Значення у списку слід відокремлювати комами. Зауважте, що параметр у `custom.conf` має пріоритет над типовим значенням. Тому, якщо ви хочете додати до списку записи користувачів, вам слід встановити типове значення з дописаними до списку додатковими користувачами.

#### Параметри безпеки

#### [security]

DisallowTCP

-     DisallowTCP=true

  Якщо має значення «true», завжди дописувати `-nolisten tcp` до командного рядка при запуску долучених серверів X, таким чином забороняючи з'єднання TCP. Це безпечніша конфігурація, якщо ви не використовуєте віддалені з'єднання.

#### Підтримка XDCMP

#### [xdmcp]

DisplaysPerHost

-     DisplaysPerHost=1

  Щоб нападники не змогли наводнити запитами чергу очікування, GDM допускає одне з'єднання з одного віддаленого комп'ютера. Якщо ви бажаєте надавати дисплей комп'ютерам з більш ніж одним екраном, відповідно слід збільшити це значення.

  Зауважте, що кількість дозволених до долучення дисплеїв не обмежено. Цим параметром налаштувань обмежено лише кількість віддалених з'єднань за допомогою XDMCP.

Enable

-     Enable=false

  Встановлення значення у true вмикає підтримку XDMCP, що дозволяє керувати GDM віддаленими дисплеями/X-терміналами.

  `gdm` очікує запити на UDP-порту 177. Докладніше дивіться у параметрі Port.

  Якщо GDM скомпільовано з бібліотекою tcp_wrapper, доступ з віддалених дисплеїв може контролюватись цією бібліотекою. Назва служби - `gdm`

  Вам слід додати

      gdm:.my.domain

  до файла `<etc>/hosts.allow`, в залежності від конфігурації бібліотеки TCP Wrappers. Докладнішу інформацію можна знайти у man-сторінці hosts.allow.

  Зауважте, що XDMCP не є безпечним протоколом, тому якщо ви не використовуєте UDP-порт 177, його краще заблокувати на вашому брандмауері.

HonorIndirect

-     HonorIndirect=true

  Дозволяє XDMCP INDIRECT вибір (тобто віддалене виконання `gdmchooser`) для X-терміналів, як не мають власної програми перегляду дисплеїв.

MaxPending

-     MaxPending=4

  Для запобігання атакам типу "відмова у доступі", GDM має фіксований розмір черги з'єднань. Одночасно можуть бути запущені лише MaxPending дисплеїв.

  Зауважте, що цей параметр не обмежує кількість віддалених дисплеїв, якими можна керувати. Обмежується лише кількість дисплеїв які одночасно ініціюють з'єднання.

MaxSessions

-     MaxSessions=16

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

MaxWait

-     MaxWait=30

  Коли GDM готовий керувати дисплеєм, йому надсилається пакет ACCEPT який містить унікальний ідентифікатор сеансу, що використовується у майбутніх пакетах XDMCP.

  Потім GDM зберігає ідентифікатор сеансу у черзі, очікуючи відповіді від дисплея пакетом MANAGE.

  Якщо відповідь не надійшла протягом MaxWait секунд, GDM вважає дисплей мертвим та стирає його з черги очікування звільняючи слот для іншого дисплею.

MaxWaitIndirect

-     MaxWaitIndirect=30

  Параметр MaxWaitIndirect визначає максимальну кількість секунд між часом, коли користувач вибрав вузол та наступним непрямим запитом до вузла. При перевищенні інтервалу очікування, інформація про вибраний вузол забувається та слот непрямого запиту звільняється. Інформація може відкинутись раніше, якщо вузлів, що намагаються надіслати непрямі запити більше за `MaxPendingIndirect`.

PingIntervalSeconds

-     PingIntervalSeconds=60

  Якщо сервер X не надасть відповіді протягом вказаної кількості секунд, з'єднання буде припинено, а сеанс буде завершено. Якщо таке трапляється, фонова служба завершує роботу із сигналом ALARM. Зауважте, що у GDM 2.20 і попередніх версіях це значення множилося на 2, тому, можливо, слід збільшити час очікування після оновлення з GDM 2.20 і попередніх версій до новіших версій удвічі.

  Зауважте, що GDM у минулому мав ключ конфігурації `PingInterval`, який вказував час у хвилинах. Для більшості застосувань XDMCP не потрібно, щоб значення цього параметра було менше за одну хвилину, проте затримка більша за 15 секунд означатиме, що термінал вимкнений або перезавантажений, та вам слід завершити сеанс.

Port

-     Port=177

  Номер UDP-порту, на якому `gdm` очікуватиме XDMCP-запитів. Не змінюйте його, якщо ви не впевнені у наслідках своїх дій.

Willing

-     Willing=<etc>/gdm/Xwilling

  Коли сервер надсилає пакет WILLING у відповідь на QUERY, він надсилає рядок з поточним статусом цього сервера. Типовим повідомленням є системний ідентифікатор, але можна створити власний сценарій, який відображатиме власне повідомлення. Якщо цей сценарій не існує або цей ключ порожній - надсилається типове повідомлення. Якщо цей сценарій успішно виконується та виводить деякий текст, надсилається перший рядок цього тексту (та лише перший рядок). Він запускається максимум раз на 3 секунди для запобігання можливим атакам типу "відмова у доступі" шляхом затоплення його запитами QUERY.

### Проста конфігурація програми привітання

Типова програма вітання GDM називається просто «Greeter» і налаштовується за допомогою GConf. Типові значення зберігаються у GConf у файлі `gdm-simple-greeter.schemas`. Ці типові параметри можна перевизначити, якщо у користувача «gdm» є придатний до запису каталог $HOME для зберігання параметрів GConf. Ці значення можна редагувати за допомогою програм `gconftool-2` та `gconf-editor`. Передбачено такі параметри налаштувань:

### Ключі конфігурації програми привітання

/apps/gdm/simple-greeter/banner_message_enable

-     false (булеве)

  Керує тим, чи буде показано текст повідомлення банера.

/apps/gdm/simple-greeter/banner_message_text

-     NULL (рядок)

  Вказує повідомлення текстового банера, яке слід показати у вікні привітання.

/apps/gdm/simple-greeter/disable_restart_buttons

-     false (булеве)

  Керує тим, чи буде показано кнопки перезапуску системи у вікні входу до системи.

/apps/gdm/simple-greeter/disable_user_list

-     false (булеве)

  Якщо має значення «true», у вікні входу до системи буде показано переглядач портретів зі списком усіх відомих користувачів.

/apps/gdm/simple-greeter/logo_icon_name

-     computer (рядок)

  Встановіть назву піктограми з теми, яку слід використати як логотип програми вітання.

/apps/gdm/simple-greeter/recent-languages

-     [] (список рядків)

  Встановлюється у значення списку мов, які типово буде показано у вікні входу до системи. Типовим значенням є «[]». З типовим значенням буде показано лише типову мову системи та пункт «Інші...», який відкриває діалогову панель із повним списком доступних мов, одну з яких може бути вибрано користувачем.

  Не рекомендуємо користувачам змінювати значення цього параметра вручну. Замість цього, GDM стежить за вибраними для цього ключа налаштувань мовами і показує їх у спадному списку разом із пунктом «Інші...». У такий спосіб спрощується вибір типових вибраних мов.

/apps/gdm/simple-greeter/recent-layouts

-     [] (список рядків)

  Встановлюється у значення списку розкладок клавіатури, які типово буде показано на панелі входу до системи. Типовим значенням є «[]». З типовим значенням буде показано лише типову розкладку клавіатури системи та пункт «Інші...», який відкриває діалогову панель із повним списком доступних розкладок клавіатури, одну з яких може бути вибрано користувачем.

  Не рекомендуємо користувачам змінювати значення цього параметра вручну. Замість цього, GDM стежить за вибраними для цього ключа налаштувань розкладками клавіатури і показує їх у спадному списку разом із пунктом «Інші...». У такий спосіб спрощується вибір типових вибраних розкладок клавіатури.

/apps/gdm/simple-greeter/wm_use_compiz

-     false (булеве)

  Керує тим, чи використовується compiz як програма для керування вікнами замість metacity.

### Налаштовування спеціальних можливостей

У цьому розділі описано параметри налаштування доступності, якими можна скористатися у GDM.

#### Вікно доступності GDM і ключі GConf

На панелі вітання GDM у вікні входу до системи буде показано піктограму доступності. Натисканням цієї піктограми можна відкрити діалогове вікно доступності GDM. У діалоговому вікні доступності GDM ви побачите список пунктів для вмикання або вимикання пов'язаних допоміжних інструментів.

Пункт для позначення, які відповідають екранній клавіатурі, екранному збільшувальному склу та допоміжним інструментам читання з екрана працюють із трьома ключами GConf, які описано у наступному розділі цього документа. Позначенням цих пунктів або зняттям з них позначення можна встановити для пов'язаного ключа GConf значення «true» або «false». Якщо для ключа GConf встановлено значення «true», буде запущено допоміжні інструменти, пов'язані із цим ключем. Якщо для ключа GConf встановлено значення «false», роботу будь-якого допоміжного інструмента, пов'язаного із цим ключем GConf, буде перервано. Ці ключі GConf не буде автоматично скинуто до типового стану після входу користувача до системи. Отже, допоміжні інструменти, які було запущено під час останнього сеансу входу за допомогою GDM, буде також запущено під час наступного сеансу входу до системи за допомогою GDM.

У інших пунктів діалогового вікна доступності GDM немає відповідних ключів у GConf, оскільки з ними не пов'язано додаткових програм, які запускаються для надання можливостей доступності. Ці інші пункти відповідають можливостями доступності, працездатність яких забезпечується сервером X, який завжди запускається під час сеансу GDM.

#### Ключі доступності GConf

У GDM передбачено вказані нижче ключі GConf для керування його можливостями доступності:

#### Ключі налаштувань GDM

/desktop/gnome/interface/accessibility

-     false (булеве)

  Керує тим, чи буде запущено інфраструктуру доступності разом із графічним інтерфейсом GDM. Такий запуск потрібен для забезпечення працездатності багатьох програм, які пов'язано із технологіями доступності.

/desktop/gnome/applications/at/screen_magnifier_enabled

-     false (булеве)

  Якщо встановлено, разом із графічним інтерфейсом GDM буде запущено допоміжні інструменти, які пов'язано із цим ключем GConf. Типово, таким інструментом є екранне збільшувальне скло.

/desktop/gnome/applications/at/screen_keyboard_enabled

-     false (булеве)

  Якщо встановлено, разом із графічним інтерфейсом GDM буде запущено допоміжні інструменти, які пов'язано із цим ключем GConf. Типово, таким інструментом є екранна клавіатура.

/desktop/gnome/applications/at/screen_reader_enabled

-     false (булеве)

  Якщо встановлено, разом із графічним інтерфейсом GDM буде запущено допоміжні інструменти, які пов'язано із цим ключем GConf. Типово, таким інструментом є програма для читання тексту з екрана.

#### Пов'язування ключів GConf до інструментів доступності

Для ключів GConf screen_magnifier_enabled, screen_keyboard_enabled, і screen_reader_enabled інструмент доступності, який буде запущено, залежить від файлів desktop, які зберігаються у каталозі автоматичного запуску GDM, як це описано у розділі «Налаштовування автозапуску» цього підручника. Будь-який файл desktop у каталозі автозапуску GDM можна пов'язати із цим ключем GConf за допомогою визначення цього ключа GConf у значенні AutostartCondition файла desktop. Отже, точний рядок AutostartCondition у файлі desktop може бути одним з таких:

    AutostartCondition=GNOME /desktop/gnome/applications/at/screen_keyboard_enabled
    AutostartCondition=GNOME /desktop/gnome/applications/at/screen_magnifier_enabled
    AutostartCondition=GNOME /desktop/gnome/applications/at/screen_reader_enabled

Якщо ключ доступності має значення «true», буде запущено будь-яку програму, яку пов'язано із цим ключем у файлі desktop автоматичного запуску GDM (якщо у цьому файлі desktop не встановлено значення «true» для ключа Hidden). Один ключ GConf може навіть запускати декілька допоміжних інструментів, якщо у каталозі автозапуску GDM зберігається декілька файлів desktop із відповідним значенням AutostartCondition.

#### Приклад внесення змін до налаштувань засобу спеціальних можливостей

Наприклад, якщо GNOME постачається із GOK як типовою екранною клавіатурою, її можна замінити, якщо хочете, будь-якою іншою програмою. Щоб замінити GOK на екранну клавіатуру «onboard» і додатково активувати допоміжний інструмент «mousetweaks» для підтримки затриманого клацання, слід скористатися описаними нижче налаштуваннями.

Створіть файл desktop для onboard і ще один для mousetweaks; наприклад, onboard.desktop і mousetweaks.desktop. Ці файли мають зберігатися у каталозі автоматичного запуску (autostart) GDM у форматі, який описано у розділі «Налаштовування автозапуску» цього документа.

Нижче наведено приклад файла `onboard.desktop`:

    [Desktop Entry]
    Encoding=UTF-8
    Name=Onboard Onscreen Keyboard
    Comment=Use an on-screen keyboard
    TryExec=onboard
    Exec=onboard --size 500x180 -x 20 -y 10
    Terminal=false
    Type=Application
    StartupNotify=true
    Categories=GNOME;GTK;Accessibility;
    AutostartCondition=GNOME /desktop/gnome/applications/at/screen_keyboard_enabled

Нижче наведено приклад файла `mousetweaks.desktop`:

    [Desktop Entry]
    Encoding=UTF-8
    Name=Software Mouse-Clicks
    Comment=Perform clicks by dwelling with the pointer
    TryExec=mousetweaks
    Exec=mousetweaks --enable-dwell -m window -c -x 20 -y 240
    Terminal=false
    Type=Application
    StartupNotify=true
    Categories=GNOME;GTK;Accessibility;
    AutostartCondition=GNOME /desktop/gnome/applications/at/screen_keyboard_enabled

Зауважте рядок із AutostartCondition, який пов'язує файли desktop із ключем GConf для екранної клавіатури.

Щоб вимкнути запуск GOK, файл desktop для екранної клавіатури GOK слід вилучити або дезактивувати. Якщо цього не зробити, буде одночасно запущено onboard і GOK. Досягти потрібного результату можна вилученням файла gok.desktop з каталогу автозапуску GDM або додаванням ключа «Hidden=true» до файла gok.desktop.

Після внесення цих змін GOK не запускатиметься, коли користувач активує екранну клавіатуру у сеансі GDM, — замість нього буде запущено onboard і mousetweaks.

### Параметри загального сеансу

Програма вітання GDM використовує деякі з бібліотек, які використовуватиме і ваш стільничний сеанс. Отже, на його роботу впливають декілька параметрів GConf стільничного сеансу. Для кожного з таких параметрів програма вітання використовуватиме типове значення, якщо його не буде окремо перевизначено а) встановленими обов'язковими правилами GDM; б) обов'язковими правилами системи. GDM встановлює власні обов'язкові правила для блокування деяких параметрів з міркувань безпеки.

### Фонова служба параметрів GNOME

GDM вмикає такі додатки gnome-settings-daemon: a11y-keyboard, background, sound, xsettings.

Ці додатки відповідають за фонове зображення, шрифт та параметри теми, озвучення подій тощо.

Додатки можна вимкнути за допомогою GConf. Наприклад, якщо ви хочете вимкнути додаток озвучення, вимкніть такий ключ: `/apps/gdm/simple-greeter/settings-manager-plugins/sound/active`.

### Налаштовування сеансу GDM

Сеанси GDM визначаються за допомогою специфікації стільничних записів FreeDesktop.org, з якою можна ознайомитися за такою адресою: http://www.freedesktop.org/wiki/Specifications/desktop-entry-spec.

Типово, GDM встановлює файли desktop до каталогу `<share>/xsessions`. GDM шукатиме файли desktop у таких каталогах, за порядком пріоритетності: `<etc>/X11/sessions/`, `<dmconfdir>/Sessions`, `<share>/xsessions` і `<share>/gdm/BuiltInSessions`. Типово, для `<dmconfdir>` встановлено значення `<etc>/dm/`, якщо GDM не налаштовано на використання іншого каталогу за допомогою параметра «--with-dmconfdir».

Сеанс можна вимкнути редагуванням файла desktop із додаванням такого рядка: `Hidden=true`.

У файлах desktop GDM передбачено підтримку специфічного для GDM розширення, ключа із назвою «X-GDM-BypassXsession». Якщо цей ключ у файлі desktop не вказано, типовим значенням для нього вважається «false». Якщо для ключа у файлі desktop вказано значення «true», GDM запустить програму, яку вказано у ключі «Exec» файла desktop безпосередньо під час запуску сеансу користувача. GDM не запускатиме програму за допомогою скрипту `<etc>/gdm/Xsession`, це звична поведінка. Оскільки обхід скрипту `<etc>/gdm/Xsession` надає змогу уникнути налаштовування сеансу користувача зі звичайними системними параметрами та параметрами користувача, сеанси, які запущено у такий спосіб, корисні для діагностування проблем у системі або скриптах користувача, які можуть заважати можливості користувача розпочати сеанс.

### Налаштовування сеансу користувача і мови GDM

Типові параметри сеансу і вибір мов користувача зберігаються у файлі `~/.dmrc`. Коли користувач входить до системи вперше, програма створює цей файл із початковими параметрами користувача. Користувач може змінити типові значення простим зазначенням іншого значення при вході до системи. GDM запам'ятає внесені зміни для наступних входів до системи.

Файл `~/.dmrc` є файлом у стандартному форматі `INI`. У ньому є один розділ із назвою `[Desktop]`, який містить два ключі: `Session` і `Language`.

Ключ `Session` вказує базову назву файла `.desktop` сеансу, якою користувач бажає користуватися без суфікса назви `.desktop`. Ключ `Language` вказує на мову, якою типово хоче користуватися користувач. Якщо якогось із цих ключів не буде вказано, буде використано типове значення для системи. Файл, зазвичай, виглядає десь так:

    [Desktop]
    Session=gnome
    Language=uk_UA.UTF-8

## Команди GDM

### Команди GDM адміністративного користувача

У пакунку GDM передбачено такі програми у `sbindir`, які має бути запущено від імені користувача root:

#### Параметри командного рядка `gdm`

`gdm` є основною фоновою службою, яка налаштовує графічне середовище для входу і запускає необхідні допоміжні програми.

#### Параметри командного рядка `gdm`

-?, --help

- Виводить коротку довідку з переліком параметрів командного рядка.

--fatal-warnings

- Зробити так, щоб попередження призводили до виходу з GDM.

--timed-exit

- Вийти за 30 секунд. Корисно для діагностики.

--version

- Вивести версію сервера GDM.

#### Параметри командного рядка `gdm-restart`

`gdm-restart` зупиняє та перезапускає GDM, надсилаючи службі GDM сигнал HUP. Це призводить до негайного припинення усіх сеансів та виходу користувачів, що увійшли через GDM.

#### Параметри командного рядка `gdm-safe-restart`

`gdm-safe-restart` зупиняє та перезапускає GDM надсилаючи службі GDM сигнал USR1. GDM перезапускається одразу після виходу усіх користувачів.

#### Параметри командного рядка `gdm-stop`

`gdm-stop` зупиняє GDM, надсилаючи службі GDM сигнал TERM.

## Усунення проблем

У цьому розділі наведено корисні підказки щодо забезпечення працездатності GDM. Загалом, якщо у вас виникають проблеми з користуванням GDM, ви можете надіслати повідомлення про ваду або повідомлення електронної пошти до списку листування gdm-list. Відомості щодо того, як це зробити, наведено у вступному розділі цього підручника.

Якщо GDM не працює належним чином, завжди варто включити до звіту діагностичні відомості. Щоб увімкнути діагностику, встановіть для ключа debug/Enable значення «true» у файлі `<etc>/gdm/custom.conf` і перезапустіть GDM. Далі, використовуйте GDM до моменту, коли трапляється помилка, і діагностичні дані буде записано до загальносистемного файла журналу (`<var>/log/messages` або `<var>/adm/messages`, залежно від вашої операційної системи). Якщо ви ділитеся цими даним зі спільнотою GDM у звіті щодо вади або повідомленні електронної пошти, будь ласка, включайте лише пов'язані із GDM діагностичні дані, але увесь файл, оскільки він може бути доволі великим. Якщо ви не бачите у системному журналі ніяких даних GDM, вам варто налаштувати системний журнал (зверніться до сторінки підручника (man) щодо syslog).

### GDM не запускається

Існує багато проблем, які можуть призводити до неможливості запуску GDM, але у цьому розділі ми обговоримо декілька типових проблем і те, яким чином підходити до відстежування причин проблем із запуском GDM. Деякі проблеми спричиняють виведення GDM повідомлення про помилку або діалогового вікна при спробі запуску, але причину проблеми важко встановити, якщо GDM завершує роботу без будь-яких повідомлень.

Спочатку, переконайтеся, що сервер X налаштовано належним чином. Файл налаштувань GDM містить у розділі [server-Standard] команду, яка використовується для запуску сервера X. Перевірте, чи працює ця команда у вашій системі. Запуск цієї команди з консолі має запускати сервер X. Якщо запустити сервер не вдається, проблему, ймовірно, пов'язано із вашими налаштуваннями сервера X. Зверніться до журналу помилок сервера X, щоб дізнатися про причини проблеми. Проблема може також полягати у тому, що ваш сервер X потребує для запуску інших параметрів командного рядка. Якщо це так, змініть команду запуску сервера X у файлі налаштувань GDM так, щоб вона відповідала вашій системі.

Також переконайтеся, що каталог `/tmp` має належного власника і права доступу, і що файлова система комп'ютера не є переповненою. Проблеми із правами доступу і переповнена файлова система не дадуть запустити GDM.

## Ліцензія

Ця програма є вільною. Ви можете поширювати та змінювати її на умовах, викладених у GNU General Public License, що видана Free Software Foundation; або версії 2 ліцензії, або (на ваше розсуд довільної старшої версії.

Ця програма поширюється з надією, що буде корисною, але БЕЗ БУДЬ_ЯКИХ ГАРАНТІЙ; навіть без неявної гарантії ПРИДАТНОСТІ ДО ПРОДАЖУ або ВІДПОВІДНОСТІ ПЕВНІЙ МЕТІ. Докладніше про це дивіться у GNU General Public License.

Копію GNU General Public License включено як додаток до Підручника користувача GNOME. Крім того, ви можете отримати копію GNU General Public License від Free Software Foundation, відвідавши їхній вебсайт або написавши до

          Free Software Foundation, Inc.
          51 Franklin Street, Fifth Floor
          Boston, MA 02110-1301
          USA