Документация по ОС FreeBSD Четверг, 25.04.2024, 15:14
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » X Window

Знакомьтесь, мистер X.Org [2008]

Парадокс: из всех компонентов свободных операционок подсистема X Window является одной из самых простых и в то же время одной из самых сложных в настройке. В большинстве случаев все необходимые параметры прописываются в конфигурационном файле во время установки дистрибутива и не требуют ручного вмешательства. Но как только появляются проблемы или ситуации, требующие нестандартного подхода, форумы начинают распухать от вопросов. Давай попробуем самостоятельно найти на них ответы.

Широкоформатный монитор

В один прекрасный день я решил, что широкоформатный монитор будет намного удобнее обычного. И не потому, что ботов в CS удобнее отстреливать или фильмы смотреть, - для работы лучше. На широком экране можно без проблем разместить два открытых окна терминала, в одном набирать команду, а во втором отслеживать, что там пишут в логах. А если ко всему этому делу еще один монитор прикрутить… Но об этом ниже. Также сегодня продается много лэптопов с широким дисплеем, их пользователям будет полезно узнать, как его настроить.

Почему-то все дистры, которые мне попадались, сразу же норовили установить одно и то же разрешение - 1440x900, плюс в конфиге обнаруживался список из восьми других вариантов, но ни один из предложенных мне не показался удобным. Убивало также, что при загрузке на мониторе постоянно высвечивалось предупреждение о неоптимальности режима, который установил Х. В меню графических средств настройки в Центре KDE System Setting нужного разрешения тоже не было (дистрибутив KUbuntu), да и как могло оно там оказаться, если у девелоперов руки растут не откуда положено. Лечится это все очень просто. Открываем /etc/X11/xorg.conf (не забывая сохранить оригинал - он еще может понадобиться) и пишем:

$ sudo mcedit /etc/X11/xorg.conf

Section "Screen"
Identifier "Default Screen"
Defaultdepth 24
SubSection "Display"
Modes "1360x1024" "1024x768"
EndSubSection
EndSection

Я оставил себе всего два разрешения, которые и использую. Остальные убрал, чтобы X-сервер меньше думал.

Параметр Defaultdepth привел, чтобы показать, как устранить еще одну ошибку. Не знаю почему, но глубина цвета у меня по умолчанию была установлена в 16. Заглянув в лог /var/log/Xorg.0.log, я увидел сообщение, что видеокарта не поддерживает 16-битный цвет с рекомендацией использовать 24-битный (что и было выставлено автоматически):

(EE) fglrx(0): The RADEON V7000 chipset does not support depth 16. Using depth 24 instead
(**) fglrx(0): Depth 24, (--) framebuffer bpp 32

После корректировки Defaultdepth все пришло в норму, сервер перестал нервничать:

(**) fglrx(0): Depth 24, (--) framebuffer bpp 32
(II) fglrx(0): Pixel depth = 24 bits stored in 4 bytes (32 bpp pixmaps)

Но вернемся к широкому экрану. В большинстве случаев корректировки параметров Modes должно хватить, но бывает, что в Windows все работает как следует, а в Linux необходимое разрешение устанавливаться никак не хочет. Это означает, что автоматически сгенерированный режим работы ModeLine не подходит. В таком случае нужные цифры придется вписывать самому. Узнать используемые по умолчанию можно, заглянув в логи:

(II) fglrx(0): Supported Future Video Modes:
(II) fglrx(0): #0: hsize: 1440 vsize 900 refresh: 60 vid: 149
(II) fglrx(0): #1: hsize: 1440 vsize 900 refresh: 75 vid: 3989
(II) fglrx(0): #2: hsize: 1280 vsize 1024 refresh: 60 vid: 32897
(II) fglrx(0): #3: hsize: 1280 vsize 960 refresh: 60 vid: 16513
(II) fglrx(0): #4: hsize: 1152 vsize 864 refresh: 75 vid: 20337
(II) fglrx(0): Supported additional Video Mode:
(II) fglrx(0): clock: 106.5 MHz Image Size: 410 x 257 mm
(II) fglrx(0): h_active: 1440 h_sync: 1520 h_sync_end 1672 h_blank_end 1904 h_border: 0
(II) fglrx(0): v_active: 900 v_sync: 903 v_sync_end 909 v_blanking: 934 v_border: 0
(II) fglrx(0): Ranges: V min: 56 V max: 75 Hz, H min: 30 H max: 81 kHz, PixClock max 140 MHz

То есть секция Monitor со строкой ModeLine, установленная по умолчанию, выглядит так:

$ sudo mcedit /etc/X11/xorg.conf

Section "Monitor"
Identifier "SyncMaster"
Option "DPMS"
 
# "режим" clock h_active h_sync h_sync_end h_blank_end v_active v_sync v_sync_end v_blanking
ModeLine "1440x900" 106.5 1440 1520 1672 1904 900 903 909 934
EndSection

Чтобы вручную не играться параметрами, можно использовать графические утилиты xvidtune и read-edid, а также онлайн-калькуляторы ModeLine, например xtiming.sourceforge.net/cgi-bin/xtiming.pl. Подробности о ModeLine смотри в XFree86-Video-Timings-HOWTO (www.opennet.ru/docs/HOWTO-RU/XFree86-Video-Timings-HOWTO.html).

Есть еще одна полезная утилита, входящая в состав X, – xrandr (в KDE есть аналог krandr), которая позволяет на лету изменять разрешение и частоту развертки без перезапуска X-сервера. Доступные режимы в виде пар «частота/разрешение» можно получить, введя:

$ xrandr –q

Индекс в первом столбце подойдет в качестве параметра вместо разрешения.

В некоторых случаях драйвер не хочет устанавливать нужное разрешение:

$ xrandr -s 1360x1024

Size 1360x1024 not found in available modes

Тогда можно просто отключить тестирование доступных режимов, указав в секции Device:

Option "ModeValidation" "NoMaxPClkCheck"

Некоторые мониторы имеют еще одну полезную функцию - поворот вокруг оси. Работать с текстом при вертикальном положении экрана очень удобно. В Linux такая возможность тоже поддерживается. Реализовать ее можно двумя способами: автоматически и вручную. В первом случае добавляем в секцию Device параметр:

Option "RandRRotation" "on"

Или

Option "Rotate" "CCW" # возможно значение "CW"

Для поворота в ручном режиме используем тот же xrandr с параметром '–o' (--orientation) и указанием направления (normal, inverted, left, right, 0, 1, 2, 3):

$ xrandr -o left

Два монитора

Многие современные (и не очень) видеокарты, в том числе установленные на ноутбуках, имеют два видеовыхода, что позволяет подключать сразу два монитора. А если такая возможность в твоей видюхе не предусмотрена, то есть и другой способ, который был популярен в старые добрые времена, - поставить еще одну видеокарточку, в PCI-слот. X-сервер поддерживает оба варианта. Их реализация в конфиге ничем не отличается, также требуются две секции Device, Screen и Monitor, сопоставленные друг другу.

Современные версии X на лету подхватывают второй монитор, без каких-либо изменений в xorg.conf. Изображение на дополнительном мониторе является точной копией первого, с таким же разрешением и частотой развертки. Если дополнительный монитор не может обеспечить такое же разрешение, как основной, будет использован виртуальный экран такого же размера. При перемещении мышки к краю видимого поля он начинает двигаться.

В графических программах настройки вроде System & Setting в KUbuntu есть соответствующие пункты, где можно указать драйвер для второго монитора, параметры вывода на экран (частоту, разрешение, повтор первого или двойной), размещение (слева или справа). Но, как правило, их активация приводит к тому, что после перезагрузки графическая подсистема вообще отказывается запускаться. Не помогает и запуск «X –configure» (sudo dpkg-reconfigure xserver-xorg) при двух включенных мониторах. К сожалению, нельзя однозначно сказать, как будет вести себя X. Это зависит от видеокарты (nVidia, ATI), используемых драйверов (открытые или закрытые), мониторов (работают с одним разрешением или с разными) и даже от сборки пакетов (32- или 64-битная платформа). Так, в настоящее время существует четыре технологии, по-своему реализующие одновременную работу на нескольких мониторах: TwinView (от nVidia), MergedFB (ATI, Matrox), BigDesktop (ATI) и Xinerama (расширение X-сервера). Опять же в одних комбинациях они могут работать, в других - нет. Поэтому в большинстве случаев приходится закатывать рукава и править вручную. В общем случае xorg.conf должен выглядеть так:

$ sudo mcedit /etc/X11/xorg.conf

Section "Monitor"
 
# Первый монитор
Identifier "SyncMaster"
Option "DPMS"
EndSection
Section "Monitor"
 
# Второй монитор
Identifier "Monitor1"
Vendorname "Samsung"
Modelname "Samsung SyncMaster 550(M)s"
Option "DPMS"
EndSection
 
# Даже если карточка одна, требуется две секции Device
# (почему так, можно узнать при помощи lspci)
Section "Device"
Identifier "ATI Technologies Inc R480 [Radeon X800 GTO (PCIE)]"
Boardname "ati"
Busid "PCI:6:0:0"
Driver "fglrx"
Screen 0
EndSection
Section "Device"
Identifier "device1"
Boardname "ati"
 
# Значение Busid смотрим в lspci
Busid "PCI:6:0:1"
Driver "fglrx"
Screen 1
EndSection
 
# Описываем параметры каждого экрана,
# «закрепляя» за каждым свой Device и Monitor
Section "Screen"
Identifier "Screen0"
Device "ATI Technologies Inc R480 [Radeon X800 GTO (PCIE)]"
Monitor "SyncMaster"
Defaultdepth 24
SubSection "Display"
Depth 24
Virtual 1360 1024
Modes "1360x1024" "1024x768"
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Monitor "monitor1"
Device "device1"
Defaultdepth 24
SubSection "Display"
Depth 24
Virtual 1024 768
Modes "1024x768" "800x600"
EndSubSection
EndSection
 
# Подключаем и указываем размещение,
# можно использовать параметр Option "RightOf" "SyncMaster" в Screen1
Section "ServerLayout"
Identifier "Default Layout"
screen 0 "Screen0" 0 0
screen 1 "Screen1" rightof " Screen0"
EndSection
 
#Section "ServerFlags"
# Option "Xinerama" "true"
#EndSection

То есть на основе имеющихся записей Device, Screen и Monitor можно создать вторые, изменив только их условное обозначение и указав порядок размещения. Подключение третьего монитора, например при помощи PCI-карты, реализуется аналогично. Рекомендую выставлять одну глубину цвета для всех мониторов. Если установить разные значения, то в некоторых случаях (при использовании двух видеокарт и Xinerama) X отказывается работать.

Обрати внимание на последнюю закомментированную секцию. Таким образом на мониторах будут выведены два независимых рабочих стола со своими меню, между которыми можно перемещать только курсор мышки (окна и прочее нельзя). При включенном режиме Xinerama рабочий стол и раскрытое окно приложения раздвигаются на два монитора. Скрин также снимается со всего рабочего пространства. Но 3D будет работать только в одном из них.

Чтобы узнать значение Busid, следует запустить lspci или заглянуть в /proc/pci. Ты удивишься, но в одной карте аж два Busid:

$ lspci

...

06:00.0 VGA compatible controller: ATI Technologies Inc R480 [Radeon X800 GTO (PCIE)]
06:00.1 Display controller: ATI Technologies Inc R480 [Radeon X800 GTO (PCIE)] (Secondary)

Автоматическое отключение монитора

Сколько себя помню, когда я дома, компьютер включается утром, а выключается поздно вечером. Даже поддержка гибернации в последних версиях дистрибутивов не может отучить меня от этой привычки. Поэтому считаю крайне полезным режим автоматического отключения монитора через некоторое время. В рабочих средах вроде KDE и Gnome есть инструменты, позволяющие выставить необходимые значения, но если ты используешь что-то попроще (IceWM), их можно указать прямо в настройках Х-сервера.

$ sudo mcedit /etc/X11/xorg.conf

Section "Device"
Option "DPMS"
EndSection
 
# И указываем время перехода в нужный режим
Section "ServerFlags"
Option "StandbyTime" "10"
Option "SuspendTime" "15"
Option "OffTime" "20"
EndSection

Теперь проверяем наличие модуля ядра apm и запускаем демон apmd, если он не работает:

$ sudo /etc/init.d/apmd start

Несколько оконных менеджеров на рабочем столе

На самом деле видеоподсистема X Window располагает гораздо большими возможностями. Например, поддерживается подключение к серверу по сети, клиенты при этом могут располагаться где угодно, да и на одном компьютере может быть запущено несколько серверов. Я не оговорился. Клиент-серверная архитектура в X несколько перекручена.

Под клиентом понимается программа, выполняющая всю работу. К ней подключаются серверы (мониторы пользователей), в том числе и удаленные. Поэтому ничего не мешает на одном компьютере запустить несколько серверов с различным номером DISPLAY.

Разработан и специальный сервер Xnest для таких задач. Он присутствует в комплекте любого дистрибутива:

$ sudo apt-cache search xnest

xnest - Nested X server
xserver-xephyr - Next Generation Nested X Server
xoo - graphical wrapper around Xnest

После установки Xnest, чтобы запустить оконный менеджер fluxbox в текущем окне, достаточно ввести:

$ Xnest :1 -ac -name Fluxbox & fluxbox -display :1

Запущенный таким образом оконный менеджер будет выполнять все привычные функции, включая запуск приложений. Если тебе мало одного оконного менеджера, добавь еще и Window Maker:

$ Xnest :2 -ac -name Windowmaker & wmaker -display :2

И так далее, лишь бы мощности компа хватило. Таким образом можно запускать и некоторые программы, например xterm. Для подключений к удаленным рабочим столам лучше всего использовать DMX (dmx.sf.net):

$ sudo apt-get install xdmx xdmx-tools

В большинстве современных дистрибутивов Х запущен без поддержки сети (параметр –nolisten tcp). Поэтому останавливаем Х и запускаем снова: startx -listen_tcp. Если поддержка сети нужна постоянно, следует подправить конфигурационный файл, убрав nolisten tcp. В Ubuntu и многих других дистрах это /etc/X11/xinit/xserverrc. После перезапуска должен быть открыт 6000-й локальный порт. Контроль доступа при подключении клиентов возложен на утилиту xhost. Так, чтобы разрешить подключения для всех, достаточно ввести «xhost +», для отключения блокировки всех подключений – «xhost –». Утилита поддерживает большое количество механизмов аутентификации. Чтобы разрешить подключение с определенного адреса, достаточно указать:

$ sudo xhost +192.168.1.10

Теперь подключаемся к нему с компьютера с указанным IP-адресом:

$ startx -- /usr/X11R6/bin/Xdmx :1 -display 192.168.1.10:0 \
-display 192.168.1.1:0 +xinerama –noglxproxy

На мониторе откроется еще одно окно, в нем появится изображение удаленного рабочего стола, которым можно смело управлять.

Сообщения в журналах Х-сервера

Журнал Х-сервера (/var/log/Xorg.0.log или XFree86.0.log) может не только дать много интересной информации о твоей видеокарте, но и, главное, помочь разобраться с проблемами. Заглянув в него, ты увидишь мириады загадочных меток. Что же означают все эти ребусы?

  • (--) – это значение получено путем тестирования оборудования,
  • (**) – эти установки взяты из конфигурационного файла,
  • (==) – использованы установки по умолчанию,
  • (++) - параметр взят из командной строки запуска сервера,
  • (!!) и (II) - уведомление и информационное сообщение,
  • (WW) - за этим знаком следует предупреждение,
  • (EE) - сообщение об ошибке,
  • (??) - событие, непонятное серверу.

То есть для поиска проблем отбирать нужно последние три вида сообщений.



Источник: http://www.xakep.ru/magazine/xa/110/096/1.asp
Категория: X Window | Добавил: oleg (27.06.2008) | Автор: Юрий «bober» Раззоренов
Просмотров: 2649 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 1
1 Sokol  
0
По поводу двух мониторов, у меня ща два монитора, ноутбук Toshiba Satellite A100-071, видеокарта Intel 945

Section "Module"
Load "glx"
Load "dbe"
Load "dri"
Load "dri2"
Load "extmod"
Load "xtrap"
Load "record"
Load "GLcore"
Load "freetype"
Load "type1"
EndSection

Section "Device"
Identifier "Intel 945G"
Driver "intel"
Option "monitor-VGA" "VGA Monitor"
Option "monitor-LVDS" "LVDS Monitor"
EndSection

Section "Monitor"
Identifier "VGA Monitor"
VendorName "Samsung"
ModelName "Samsung SyncMaster 943NW"
HorizSync 31.5 - 100.0
VertRefresh 59.9 - 75.0
ModeLine "1440x900@75.00" 136.49 1440 1536 1688 1936 900 901 904 940 -HSync +Vsync
EndSection

Section "Monitor"
Identifier "LVDS Monitor"
Option "Below" "VGA Monitor"
Option "Enable" "true"
EndSection

Section "Screen"
Identifier "Default Screen"
Device "Intel Corporation 945G Integrated Graphics Controller"
Monitor "VGA Monitor"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1440x900" "1280x1024" "1024x768" "640x480"
Virtual 2048 2048
EndSubSection
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:ctrl_shift_toggle"
EndSection

Section "InputDevice"
Identifier "Keyboard1"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:ctrl_shift_toggle"
EndSection


Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024