Available Languages: | Deutsch | English | Español | Français | 日本語 (Nihongo) | Português | Русский (Russkiy) | 中文 (简) (Simplified Chinese) |

Использование X11 в Darwin и Mac OS X

Данный документ посвящен использованию X11 / XFree86 / Xtools в Mac OS X и Darwin Apple. В нем вы найдете введение, историю создания продукта, а также отражение текущей ситуации и множества имеющихся возможностей для применения X11 как с Fink, так и иным образом.

Contents

1 Введение

1.1 Что такое X11?

X Window System, версия 11 (или сокращенно X11) является системой графического отображения с прозрачной для сети архитектурой клиент-сервер. Она позволяет приложениям графически создавать на экране пиксели, линии, тексты, изображения и т.п. X11 также имеет дополнительные библиотеки, благодаря которым приложения могут свободно рисовать интерфейсы пользователя - кнопки, поля для текста и т.п.

X11 фактически является стандартной системой графического отображения в мире Unix. Она поставляется вместе с Linux, *BSD и большинством коммерческих вариантов Unix. На ее основе работают такие виды среды рабочего стола, как CDE, KDE и GNOME.

1.2 Что такое Mac OS X?

Mac OS X - операционная система, производителем которой является Apple. Как и предшествующие NeXTStep и OpenStep, она основана на BSD и таким образом входит в семейство операционных систем Unix. Но при этом она выпускается с системой графического отображения, являющейся частной собственностью. Графический процессор называется Quartz, а интерфейс Aqua, хотя оба названия часто используются как взаимозаменяемые.

1.3 Что такое Darwin?

Darwin по сути является упрощенной версией Mac OS X, которую можно получить бесплатно с полным исходным кодом. Она не содержит Quartz, Aqua и прочую сопутствующую технологию. По умолчанию она предлагает только текстовую консоль.

1.4 Что такое XFree86?

XFree86 - реализация X11 на основе исходного кода. Первоначально она была разработана для применения на ПК Intel x86, отсюда и ее название. В настоящее время применяется во многих архитектурах и операционных системах, в т.ч. OS/2, Darwin, Mac OS X и Windows.

1.5 Что такое Xtools?

Xtools - продукт Tenon Intersystems. Это версия X11 для Mac OS X, основанная на XFree86.

1.6 Клиент и сервер

X11 имеет архитектуру клиент-сервер. Есть одна центральная программа, которая фактически создает графику и координирует доступ через несколько приложений; это сервер. Приложение, желающее создать графику с применением X11, соединяется с сервером и дает указание, что именно надо нарисовать. В контексте X11 приложения называются клиентами.

X11 позволяет серверу и клиентам находиться на разных машинах, в результате чего часто происходит путаница в терминах. В среде с рабочими станциями и серверами вы будете использовать сервер отображения X11 на машине рабочей станции, а приложения (клиенты X) - на машине сервера. Таким образом, говоря "сервер", вы имеем в виду программу сервера отображения X11, а не машину, спрятанную в вашем шкафу.

1.7 Что означает "бескорневой" ("rootless")?

Немного предыстории: X11 моделирует экран в виде иерархии окон, находящихся одно в другом. В верхней части иерархии находится специальное окно размером с экран, вмещающее все другие окна. Оно содержит фон рабочего стола и называется "корневым окном".

Теперь вернемся к нашей теме: Как и любая графическая среда, X11 написана для самостоятельной работы и полного управления экраном. В Mac OS X Quartz уже управляет экраном, т. обр. для одновременной работы обеих систем надо совершить определенные действия.

Одно из возможных действий - позволить системам работать поочередно. Каждая среда получает в распоряжение весь экран, но в определенный момент времени видна только одна из них и пользователь может перемещаться между ними. Это называется полноэкранным или корневым режимом. Корневым - потому что есть абсолютно нормальное корневое окно на экране X11, работающее также, как и в других системах.

Другое действие - комбинирование окон двух видов среды. Это устраняет необходимость перемещения между экранами, а также избавляет от корневого окна X11, т.к. Quartz уже берет на себя заботу о фоне рабочего стола. Поскольку нет корневого (видимого) окна, данный режим называется "бескорневым". Это наиболее удобный способ использования X11в Mac OS X.

1.8 Что такое менеджер окон?

В большинстве видов графической среды вид рамок окон (строка заголовка, кнопка закрытия и т.д.) определяется системой. В X11 это решается иначе. Рамки окон (также называемые "декоративными обрамлениями") в X11 обеспечиваются отдельной программой - менеджером окон. Во многих отношениях менеджер окон является просто еще одним клиентом; он запускается и общается с сервером X через те же каналы.

Существует большой выбор разных менеджеров окон. На сайте xwinman.org имеется исчерпывающий список. Наиболее популярные из них позволяют пользователю настроить вид через т. наз. темы. Многие менеджеры окон также обеспечивают такие дополнительные функции, как всплывающие меню в корневом окне, стыковки и кнопки запуска.

Для Fink скомпилированы многие менеджеры окон - см. текущий список.

1.9 Что такое Quartz/Aqua, Gnome и KDE?

Это виды среды рабочего стола, в числе многих других. Их цель - обеспечение дополнительных границ для приложений, чтобы их вид и поведение были визуально последовательными. Пример:

графический процессор : X11

менеджер окон : sawfish

рабочий стол : Gnome

Границы между графическим процессором, менеджером окон и рабочим столом размыты, т.к. схожая или одинаковая функция может быть реализована одним или несколькими из них. Это одна из причин того, почему отдельный менеджер окон может не работать с отдельной средой рабочего стола.

Многие приложения разработаны для интеграции с отдельным рабочим столом. Чаще всего после инсталляции библиотек среды рабочего стола (и других базовых библиотек) разработанное для данной среды приложение работает с небольшими функциональными потерями или вовсе без них. Примером служит растущий выбор приложений GNOME, которые можно инсталлировать и использовать без применения GNOME. К сожалению, это достижение пока не распространяется на приложения KDE.

2 История создания продукта

[Извините за эпический стиль, не смог устоять...]

2.1 Отрочество

Вначале не было ничего. Darwin только появилась на свет, Mac OS X находилась на стадии разработки, а X11 еще не была создана.

Затем появился Джон Кармак и перенес XFree86 в Mac OS X Server, которая была единственной на тот момент операционной системой в семействе Darwin. Впоследствии Дейв Зарзыки адаптировал этот перенос для XFree86 4.0 и Darwin 1.0 . Патчи нашли свое место в хранилище CVS Darwin и оставались там в ожидании грядущих событий.

2.2 Формы XonX

В один прекрасный день появился Торри Т. Лайонс и патчам Darwin было наконец уделено внимание, которого они так ждали. Наконец-то он перенес их в их новый дом - официальное хранилище CVS XFree86. Это было время, когда Mac OS X Public Beta и Darwin 1.2. XFree86 4.0.2 прекрасно работали в Darwin, но Mac OS X требовала, чтобы пользователи завершали работу в Aqua и переходили к консоли для выполнения действий. Торри собрал вокруг себя команду XonX и отправился в путешествие, чтобы доставить XFree86 в Mac OS X.

Примерно в то же время Tenon начала построение Xtools с использованием XFree86 4.0 в качестве основы.

2.3 Быть иль не быть корневым?

Вскоре команда XonX добилась реализации XFree86 в полноэкранном режиме параллельно Quartz и предоставляла пробные версии авантюрным пользователям. Пробные версии назывались XFree86-Aqua или сокращенно XAqua. Поскольку Торри возглавлял работу, изменения отражались непосредственно в хранилище CVS XFree86, что привело к выпуску версии 4.1.0.

Сначала сопряжение с Quartz осуществлялось через небольшое приложение Xmaster.app (написанное в Carbon и затем переписанное в Cocoa). Впоследствии этот код был встроен в сам сервер X и породил приложение XDarwin.app. В этот же период была добавлена поддержка общей библиотеки (и Tenon была убеждена в использовании этого комплекта патчей вместо собственных патчей для обеспечения бинарной совместимости). Был достигнут явный прогресс в бескорневом режиме (с использованием Carbon API), но увы - было слишком поздно для его включения в XFree86 4.1.0. Бескорневой патч оказался на свободе и продолжил свое плавание по сети. После XFree86 4.1.0, выпущенной с полноэкранным режимом, работа надо бескорневым режимом продолжилась, теперь уже с использованием Cocoa API. Экспериментальный бескорневой режим был внесен в хранилище CVS XFree86.

Тем временем Apple выпустила Mac OS X 10.0 и Darwin 1.3, а несколько недель спустя Tenon выпустила Xtools 1.0.

Был продолжена работа по интеграции бескорневого режима в XFree86, и таким образом ко времени выпуска XFree86 4.2.0 в январе 2002 г. версия Darwin/Mac OS X была полностью интегрирована в основную дистрибуцию XFree86.

3 Получение и инсталляция XFree86

3.1 Инсталляция через Fink

Fink позволит вам инсталлировать X11 любым желательным для вас образом, в то же время предоставив собственные пакеты XFree86. С помощью команды fink install ... Fink скачает исходный код и скомпилирует его на вашем компьютере. Если вы используете apt-get install ... или dselect, скачаются предварительно скомпилированные бинарные пакеты, аналогичные официальной дистрибуции XFree86.

Пакет xfree86-base содержит всю XFree86 4.2.1.1 (4.2.0 для пользователей 10.1), кроме сервера XDarwin. Пакет xfree86-rootless является сервером стандартной стабильной версии XFree86 4.2.1.1. Он поддерживает как полноэкранную, так и бескорневую работу, а также имеет поддержку OpenGL. (Когда-то в самом начале у Fink также был пакет xfree86-server, обеспечивавший полноэкранный режим, но этой опции больше нет.) У вас также есть возможность инсталлировать сервер самостоятельно - см. ниже. Только в этом случае надо инсталлировать xfree86-base, иначе появится риск, что Fink сделает перезапись вашего вручную инсталлированного сервера. Имейте в виду, что текущая стабильная версия xfree86-base (4.2.1.1-3) генерирует xfree86-rootless, xfree86-base-shlibs и xfree86-rootless-shlibs в процессе построения. При этом вам надо иметь все четыре инсталлированных пакета, чтобы настройки XFree86 работали.

Связные пакеты xfree86-base-threaded и xfree86-rootless-threaded по сути являются тем же самым, но модифицированы для поддержки связности, требуемой несколькими приложениями - такими, как xine.

XFree86 4.2.11 (несвязная) считается стабильной базовой версией XFree86 для использования с Fink в 10.2. Также имеется XFree86 4.3.0, но она считается более экспериментальной; на данный момент только она представлена на нестабильном дереве . Она имеет интегрированную связную поддержку и работает быстрее, чем 4.2.1.1. Для инсталляции этой версии надо инсталлировать пакет xfree86. Имейте в виду, что для этой версии больше нет отдельных базовых и бескорневых пакетов, хотя библиотеки и распределены в xfree86-shlibs. Если вы строите бинарные пакеты на основе 4.3, предупреждаем, что они могут не работать в 4.2.1.1 или X11 Apple.

Для пользователей 10.3: Вам надо инсталлировать 4.3.99.16-2 или более позднюю версию, которые являются предварительными выпусками XFree86-4.4. Если вы работаете на основе бинарной дистрибуции, убедитесь, что описание пакетов обновлено (н-р, через sudo apt-get update).

3.2 Бинарные файлы Apple

7 января 2003 г. Apple выпустила специальную реализацию X11 на основе XFree86-4.2, включающую визуализацию Quartz и ускоренную OpenGL. Следующая новая версия вышла 10 февраля 2003 г. с дополнительными характеристиками и корректировками. Третья версия (Beta 3) вышла 17 марта 2003 г. с дальнейшими дополнительными характеристиками и корректировками. Эта версия может использоваться в Jaguar.

24 октября 2003 г. Apple выпустила Panther (10.3), включающую версию ее дистрибуции X11. Эта версия основана на XFree86-4.3.

Перед использованием бинарных файлов Apple надо удостовериться, что инсталлирован пакет X11 User, а также обновить Fink.

Для версии fink-0.16.2 вам надо будет также инсталлировать пакет X11 SDK. После этого Fink создаст виртуальный пакет system-xfree86.

В случае fink-0.17.0 и более поздних версий необходима лишь инсталляция X11 SDK, если вы хотите построить пакеты от исходного кода. В подобном случае, даже если у вас не будет SDK, будут виртуальные пакеты system-xfree86 и system-xfree86-shlibs, причем последний будет представлять общие библиотеки. Если вы инсталлируете SDK, также будет пакет system-xfree86-dev, представляющий заголовки.

Если у вас уже инсталлирована дистрибуция XFree86 - через Fink или иным образом - можно выполнить Инструкции по замене одного пакета X11 другим пакетом. Удалите существующий пакет, а затем инсталлируйте X11 Apple (и X11 SDK, если это необходимо или желательно).

Некоторые примечания по использованию X11 Apple:

3.3 Официальные бинарные файлы

В проекте XFree86 есть официальная бинарная дистрибуция XFree86 4.2.0, которую можно обновить до 4.2.1.1 с патчами. Ее можно найти на локальном зеркале XFree86 mirror в каталоге 4.2.0/binaries/Darwin-ppc-5.x. Убедитесь в получении тарболов Xprog.tgz и Xquartz.tgz, даже если они отмечены как необязательные. Если вы не уверены в том, что именно вам нужно, просто скачайте весь каталог. Выполните скрипт Xinstall.sh в качестве суперпользователя для инсталляции всего материала. (Рекомендуем прочитать Официальные инструкции перед инсталляцией.) Если хотите, можете использовать binary из XonX, использующий идентичный, но более легкий в применении исходный код. Тем или иным образом скачайте, разархивируйте и сделайте следующие обновления:

  1. для 10.1: 4.2.0 -> 4.2.0.1 upgrade. для 10.2: 4.2.0 -> 4.2.0.1 upgrade
  2. для 10.1 и 10.2: 4.2.0.1 -> 4.2.1.1 upgrade

Также существует официальная дистрибуция XFree86 4.3.0 на XFree86 mirrors в каталоге 4.3.0/binaries/Darwin-ppc-6.x. Убедитесь в получении тарболов Xprog.tgz и Xquartz.tgz, даже если они отмечены как необязательные. Если вы не уверены в том, что именно вам нужно, просто скачайте весь каталог. Выполните скрипт Xinstall.sh в качестве суперпользователя для инсталляции всего материала. (Рекомендуем прочитать Официальные инструкции перед инсталляцией.)

Независимо от установленной версии, теперь вы имеете XFree86 с сервером для полноэкранного либо бескорневого режима работы в Mac OS X.

3.4 Официальный исходный код

Если у вас есть свободное время, можно построить XFree86 4.2.0 от исходного кода. Исходный код можно найти на локальном зеркале XFree86 mirror в каталоге 4.2.0/source. Скачайте все три тарбола X420src-#.tgz и извлеките их в одном каталоге. Можно установить собственные настройки для построения, внеся макроопределения в файл config/cf/host.def на дереве исходного кода XFree86. См. config/cf/darwin.cf для получения подсказок. (Прим.: Только макросы с пометкой #ifndef могут быть перезаписаны в host.def.)

Когда конфигурация будет вас удовлетворять, скомпилируйте и инсталлируйте XFree86 посредством следующих команд:

make World sudo make install install.man

Для обновления до 4.2.1.1 надо следовать инструкциям раздела Официальные бинарные файлы.

Для инсталляции 4.3.0 надо следовать вышеуказанным инструкциям, заменив "2" на "3", но не надо выполнять процедуру обновления 4.2.1.1.

Как и в случае с официальными бинарными файлами, теперь у вас есть XFree86 с сервером, который может обеспечивать полноэкранный или бескорневой режим в Mac OS X.

3.5 Исходный код на основе последних разработок

Если вы располагаете не только временем, но и запасом нервных клеток, можно получить последнюю разработку версии XFree86 из общего хранилища CVS. Предупреждаем, что код находится в процессе постоянного развития; сегодняшний код обычно отличается от вчерашнего.

Для выполнения инсталляции следуйте инструкциям относительно CVS XFree86 для скачивания модуля xc. Затем надо выполнить инструкции по построению, указанные выше.

3.6 MacGimp

Скачиваемый инсталлятор, предложенный разработчиками MacGimp в 2001 г., не содержал XFree86. (Впрочем, он сделал бы перезапись некоторых файлов конфигурации XFree86.)

Компакт-диск, продаваемый MacGimp, Inc., якобы содержит XFree86. Не совсем понятно, какая это версия; это может быть смесь 4.0.3, 4.1.0 и собственной разработки. Сервер обеспечивает работу в бескорневом режиме с использованием патча, созданного до 4.1.0.

3.7 Замена X11

Если у вас инсталлирован один из пакетов Fink X11, но по какой-либо причине надо его удалить и заменить другим, выполняется прямолинейная процедура. Надо принудительно удалить старый пакет и затем инсталлировать новый, чтобы поддержать последовательность базы данных dpkg.

Выполнить это можно двумя способами:

  1. Использовать FinkCommander

    Если вы используете FinkCommander, можно сделать принудительное удаление ("force remove") через меню. Например, если у вас инсталлирован xfree86-rootless, а вы хотите установить связную версию, надо выделить пакеты xfree86-rootless, xfree86-rootless-shlibs, xfree86-base и xfree86-base-shlibs и применить

    Source -> Force Remove
  2. Удалить вручную со строки команд

    Надо применить dpkg с опцией --force-depends, н-р:

    sudo dpkg -r --force-depends xfree86-rootless\
                            xfree86-rootless-shlibs xfree86-base xfree86-base-shlibs

    Имейте в виду, что если у вас есть приложения, требующие связной версии пакета XFree86, могут возникнуть проблемы с базой данных dpkg, если вы принудительно удаляете его и инсталлируете другой пакет XFree86 или заполнителя.

Версию X11, инсталлированную не через Fink, удаляют со строки команд:

sudo rm -rf /usr/X11R6 /etc/X11

Вышеуказанное относится к удалению любого параметра X11, инсталлированного не через Fink. Вам надо будет также удалить XDarwin.app |X11.app, в зависимости от того, что инсталлировано. При удалении X11 Apple проверьте свой файл .xinitrc, чтобы убедиться, что вы не пытаетесь использовать quartz-wm. Затем можно инсталлировать любую нужную вам X11, вручную или через Fink.

3.8 Обзор пакетов Fink

Краткий обзор видов инсталляции и пакетов Fink, которые вам надо инсталлировать:

Вид инсталляцииПакеты Fink
4.2.x при помощи Fink

xfree86-base и xfree86-rootless (и их -shlibs)

или xfree86-base-threaded и xfree86-rootless-threaded-shlibs)

4.3.x при помощи Fink

xfree86 и xfree86-shlibs

4.x на основе официальных бинарных файлов

только system-xfree86 (+разделители)

4.x на основе исходного кода или последнего исходного кода CVS

только system-xfree86 (+разделители)

4.2.x от Apple

только system-xfree86 (+разделители)

4.3.x от Apple

только system-xfree86 (+разделители)

4 Запуск XFree86

4.1 Darwin

В чистой Darwin XFree86 ведет себя также, как в других продуктах Unix. Обычный способ запуска - через startx с консоли; запускается сервер и некоторые исходные клиенты, такие, как менеджер окон и терминальный эмулятор с оболочкой. В чистой Darwin не требуется уточнять параметры, достаточно просто напечатать:

startx

Можно сделать настройки запуска в нескольких файлах в своем базовом каталоге. .xinitrc управляет очередностью запуска клиентов. .xserverrc управляет опциями сервера и даже может запускать другой сервер. В случае возникновения проблем (н-р, появится пустой экран или XFree86 переместит вас обратно к консоли) их можно исправить путем удаления этих файлов. Если не удается найти эти файлы при помощи startx, в действие вступают безотказные настройки по умолчанию.

В качестве альтернативы можно запустить сервер напрямую при помощи одной из опций XDMCP, н-р:

X -query remotehost

Подробную информацию можно найти на странице руководства Xserver.

Наконец, можно настроить xdm; см. страницу руководства.

Прим.: Если вы используете Mac OS X, предшествующую Panther, можно напечатать >console в окне регистрации и получить текстовую консоль, эквивалентную чистой Darwin. Если вы не видите области для ввода имени пользователя в окне регистрации, просто напечатайте начальную букву любого имени пользователя и затем нажмите alt-return. Можно использовать все методы запуска, описанные выше, кроме xdm.

Прим.: При использовании Mac OS X Panther вы не сможете запускать XFree86 из окна консоли.

4.2 Mac OS X + XFree86 4.x.y

Есть два основных способа запустить XFree86 в Mac OS X. Первый: двойным щелчком на приложении XDarwin.app в каталоге приложений. Это позволит сделать выбор между полноэкранным и бескорневым режимом в диалоге при запуске. Можно дезактивировать диалог и настроить XDarwin на постоянное использование выбранного вами режима в диалоге параметров.

До выпуска 4.2.0 это действие автоматически активировало полноэкранный режим и не было способа активации бескорневого режима двойным щелчком.

Другой способ запуска XFree86 в Mac OS X: при помощи startx из Terminal.app. При запуске сервера таким образом надо указать, что он должен работать параллельно Quartz. Это можно сделать при помощи опции -fullscreen, н-р:

startx -- -fullscreen

Таким образом происходит запуск сервера в полноэкранном режиме, а также клиентов в .xinitrc.

ПРИМЕЧАНИЕ: до выпуска 4.2 для активации полноэкранного режима применяли -quartz.

Если ваш сервер поддерживает бескорневые операции, можно запустить его в бескорневом режиме при помощи опции -rootless:

startx -- -rootless

Опция -quartz больше не активирует полноэкранный режим, а использует режим по умолчанию, определенный в параметрах.

Что касается 4.3, если вы используете startx без настройки параметров, появляется окно диалога запуска.

4.3 Файл .xinitrc

Если в вашем базовом каталоге имеется файл с именем .xinitrc, он будет использоваться для запуска некоторых исходных клиентов X, н-р, менеджера окон, некоторых xterms или среды рабочего стола типа GNOME. Файл .xinitrc является скриптом оболочки, содержащим команды для выполнения указанного. Не надо указывать #!/bin/sh в первой строке и настраивать выполняемый бит в имени файла; xinit знает, как запустить его через оболочку.

Если в вашем базовом каталоге нет файла .xinitrc, XFree86 использует по умолчанию свой файл /private/etc/X11/xinit/xinitrc. Можно использовать файл по умолчанию в качестве отправной точки для собственного .xinitrc:

cp /private/etc/X11/xinit/xinitrc ~/.xinitrc

Если вы используете Fink, надо поместить init.sh в самом начале для обеспечения правильности настроек среды.

Вы можете внести произвольные команды в .xinitrc, но здесь надо кое-что пояснить. Во-первых, интерпретирующая файл оболочка по умолчанию будет ждать завершения работы каждой отдельной программы, прежде чем запустить следующую. Если вы хотите, чтобы несколько программ работали параллельно, надо приказать оболочке поместить их "на задний план", добавив & в конце строки.

Во-вторых, xinit ждет, пока скрипт .xinitrc закончит работу и интерпретирует окончание работы таким образом: "сеанс завершен, теперь я также должен уничтожить сервер X ". Это значит, что последняя команда вашего файла .xinitrc не должна выполняться на заднем плане, а должна быть программой длительного действия. Обычно для этой цели используется менеджер окон. Вообще, менеджеры окон предполагают, что xinit ждет окончания их работы и используют это для ввода записи о "завершении сеанса" в работу их меню. (Прим.: Для сохранения циклов ОЗУ и центрального процессора можно указать exec перед последней строкой, как в примере ниже.)

Простой пример запуска GNOME:

. /opt/sw/bin/init.sh exec gnome-session

Более сложный пример для пользователей bash, который отключает X11, делает запуск некоторых клиентов и в конце концов менеджера окон Enlightenment:

. /opt/sw/bin/init.sh xset b off xclock -geometry -0+0
                & xterm & xterm & exec enlightenment

Для запуска GNOME 2.2 в X11 Apple используйте следующую последовательность:

. /opt/sw/bin/init.sh quartz-wm --only-proxy &
                metacity & exec gnome-session

При запуске GNOME 2.4 в X11 Apple metacity запускается автоматически, и таким образом последовательность следующая:

. /opt/sw/bin/init.sh quartz-wm --only-proxy & exec gnome-session

Для запуска KDE 3.2 (версия < 3.2.2-21) в X11 Apple используйте

. /opt/sw/bin/init.sh export KDEWM=kwin quartz-wm
                --only-proxy & /opt/sw/bin/startkde >/tmp/kde.log 2>&1

Наконец, для запуска последней нестабильной версии KDE в X11 Apple:

. /opt/sw/bin/init.sh /opt/sw/bin/startkde >/tmp/kde.log 2>&1

5 Xtools

5.1 Инсталляция Xtools

Теперь это легко изменить. Получите инсталлятор, дважды щелкните на нем и следуйте инструкциям. Внимательно выберите объем запуска, когда об этом появится запрос.

При использовании Fink надо инсталлировать пакет system-xtools после инсталляции Xtools. Этот пакет не инсталлирует никакие файлы, а просто проверяет наличие библиотек и т.п., а также действует в качестве заполнителя в системе зависимостей Fink.

5.2 Запуск Xtools

Для запуска Xtools надо дважды щелкнуть на Xtools.app в каталоге приложений. Как и XFree86, Xtools производит запуск клиентов, указанных вами в файле .xinitrc. Помимо этого, Xtools позволяет делать запуск клиентов через меню.

5.3 Примечания в связи с OpenGL

Xtools применяет аппаратное ускорение OpenGL в бескорневом режиме и имеет библиотеки для его поддержки. Основная библиотека libGL очень хорошая, тогда как библиотеки libGLU и libglut представлены только в статическом виде, чего недостаточно для полной бинарной совместимости с XFree86. Кроме того, не хватает некоторых заголовков. На данный момент Fink не может предложить решения этой проблемы. Будем надеяться, что она будет решена в Xtools 1.1.

6 Другие возможности X11

6.1 VNC

VNC - система графики с сетевой архитектурой, аналогичной X11 по дизайну. При этом она работает на более низком уровне, что облегчает ее реализацию. С сервером Xvnc и клиентом отображения Mac OS X можно использовать приложения X11 в Mac OS X. Страница Джеффа Уайтейкера Xvnc рассказывает об этом более подробно.

6.2 WiredX

WiredX - сервер X11, написанный на языке Java. Он также поддерживает бескорневой режим. Его веб-сайт предоставляет пакет Installer.app.

6.3 eXodus

Согласно своему веб-сайту, eXodus 8 от Powerlan USA работает в Mac OS X. Неизвестно, какую кодовую базу он использует, предоставляет ли поддержку локальным клиентам и если да, то каким образом. По этой причине Fink не обеспечивает специальную поддержку, предназначенную для eXodus. Если у вас есть более подробная информация, просим сообщить нам.

7 Устранение проблем, возникших в связи с XFree86

7.1 При запуске XDarwin она практически сразу завершает работу или зависает

Прежде всего: не паникуйте! Есть масса вещей, которые плохо работают с XFree86, и многие из них могут вызывать сбои при запуске. Кроме того, нет ничего необычного в том, что XDarwin прекращает работу, когда сталкивается в проблемами запуска. В данном разделе мы попытаемся отразить все проблемы, с которыми вы можете столкнуться. Но прежде всего вам надо собрать всю необходимую информацию:

Версия XDarwin. Вы можете найти версию XDarwin в искателе (Finder), щелкнув один раз на иконке XDarwin и выделив "Show Info" в меню. Версия отражает возрастающие номера новых пробных бинарных версий в рамках проекта XonX, и таким образом "1.0a1" фактически может быть любой версией между 1.0a1 и 1.0a2.

Сообщения об ошибках. Далее даны основные виды точного описания отдельных возникающих проблем. От вашего способа запуска XDarwin зависит форма получения сообщения об ошибке. Если вы запускаете startx из терминального окна, сообщение появится непосредственно в этом окне. Не забывайте, что можно использовать прокрутку. Если вы запускаете XDarwin при помощи двойного щелчка на иконке, сообщение поступит в системный журнал, к которому вы можете получить доступ через приложение консоли в каталоге утилит. Убедитесь, что выбираете правильный (т.е. последний) набор сообщений.

Начнем со списка сообщений, которые вы можете увидеть:

_XSERVTransmkdir: Owner of /tmp/.X11-unix should be set
                to root
_IceTransmkdir: Owner of /tmp/.ICE-unix should be set to root

Классификация ошибки: безобидная. X11 создает скрытые каталоги в /tmp для хранения "файлов" разъемов для локальных соединений. Из соображений безопасности X11 предпочитает, чтобы эти каталоги принадлежали суперпользователю, но поскольку они в любом случае пишутся пословно, в их работе не возникает проблем. (Прим.: Их владение суперпользователем крайне затруднительно, т.к. Mac OS X удаляет /tmp при перезагрузке, а работе XDarwin не присущи привилегии суперпользователя, впрочем они ей и не требуются.)

QuartzAudioInit: AddIOProc returned 1852797029
-[NSCFArray objectAtIndex:]: index (2) beyond bounds (2)
kCGErrorIllegalArgument : CGSGetDisplayBounds (display 35434400)
No core keyboard

Классификация ошибки: сомнительная. Это проистекающие ошибки в результате попытки сервера вновь настроить самого себя после предыдущей ошибки. В процессе этого печатается другая копия баннера запуска, после чего появляется одно или несколько из вышеуказанных сообщений, поскольку повторная настройка сервера не может работать должным образом в поврежденных версиях XDarwin. Если вы получаете подобные сообщения, надо сделать прокрутку в терминальном окне соответствующей консоли и поискать другой набор баннера и сообщений. Это относится ко всем версиям вплоть до XDarwin 1.0a3 включительно; данная проблема была решена после выпуска 1.0a3.

cat: /Users/chrisp/.Xauthority: No such file or directory

Классификация ошибки: практически безобидная. Неизвестно, как эти сообщения приходят, но на работу они не влияют. Можно от них избавиться, применив touch .Xauthority в базовом каталоге.

Gdk-WARNING **: locale not supported by C library

Классификация ошибки: безобидная. Она просто отражает свое содержание и не препятствует работе приложения. Более подробно см. ниже.

Gdk-WARNING **: locale not supported by Xlib, locale set
                to C Gdk-WARNING **: can not set locale modifiers

Классификация ошибки: серьезная, но не фатальная. Такие сообщения могут появляться в дополнение к вышеуказанным. Они означают, что локальные файлы данных XFree86 отсутствуют. Нам представляется, что они появляются невоспроизводимым образом при построении Free86 от исходного кода. Большинство приложений будут продолжать работу, за очевидным исключением GNU Emacs.

Unable to open keymapping file USA.keymapping. Reverting
                to kernel keymapping.

Классификация ошибки: чаще всего фатальная. Это может произойти с XDarwin 1.0a1 при активации опции раскладки клавиатуры "Загрузить из файла" ("Load from file"). Данная версия нуждается в полном маршруте при настройке загрузки файла через диалог параметров, но производит автоматический поиск при ее передаче на строку команд. Это сообщение обычно сопровождается другим сообщением с "assert", приведенным ниже. Для исправления ошибки выполните нижеуказанные инструкции.

Fatal server error: assert failed on line 454 of darwinKeyboard.c!
Fatal server error: Could not get kernel keymapping! Load
                keymapping from file instead.

Классификация ошибки: фатальная. Изменения, внесенные Apple в Mac OS X 10.1, повредили код XFree86, считывающий раскладку клавиатуры из ядра операционной системы; в результате появилось данное сообщение. Надо использовать опцию "Загрузить из файла" ("Load from file") в Mac OS X 10.1. Настройка находится в диалоге параметров XDarwin. Убедитесь, что файл выделен (т.е. используйте кнопку "Pick file") - простая активация отмечаемой кнопки недостаточна в некоторых версиях XDarwin. Если вы не можете попасть в диалог параметров из-за того, что XDarwin закрывается прежде, чем у вас появляется возможность это сделать, используйте startx -- -quartz -keymap USA.keymapping в терминальном окне. Обычно этого достаточно для запуска XDarwin; затем вы можете отразить постоянный выбор в диалоге параметров.

Fatal server error: Could not find keymapping file .

Классификация ошибки: фатальная (о чем и сообщается). Данная ошибка возникает по причине отсутствия файлов раскладки клавиатуры в Panther. Надо инсталлировать xfree86-4.3.99-16 или более позднюю версию - они не нуждаются в файлах раскладки клавиатуры.

Warning: no access to tty (Inappropriate ioctl for
                device). Thus no job control in this shell.

Классификация ошибки: в большинстве случаев безобидная. XDarwin 1.0a2 и более поздние версии запускают интерактивную оболочку на заднем плане для запуска клиентского файла (.xinitrc). Это делается для того, чтобы вам не пришлось добавлять определения для настройки PATH в этом файле. Некоторые оболочки жалуются, что они не подсоединены к реальному терминалу, но на это можно не обращать внимания, потому что оболочки не используются в целях управления заданиями и т.п.

Fatal server error: failed to connect as window server!

Классификация ошибки: фатальная. Она означает, что сервер консольного режима (для чистой Darwin) начал работу, пока вы были в Aqua. Как правило, это происходит, если для инсталляции была использована официальная бинарная дистрибуция XFree86 без тарбола Xquartz.tgz. Это также может произойти, если алиасы в /usr/X11R6/bin перепутались или вы использовали команду XDarwin в терминальном окне для запуска сервера (в последнем случае надо вместо нее использовать команду startx - см. Starting XFree86).

В любом из этих случаев вы можете использовать ls -l /usr/X11R6/bin/X* и проверить выходные данные. Вы должны увидеть четыре соответствующих записи: X, алиас со ссылкой на XDarwinStartup;XDarwin, выполняемый файл (это сервер с консольным режимом); XDarwinQuartz, алиас со ссылкой на /Applications/XDarwin.app/Contents/MacOS/XDarwin; XDarwinStartup, небольшой выполняемый файл. Если какие-либо из данных записей отсутствуют или ссылаются на другие файлы, надо сделать исправление. Способ исправления зависит от способа, использованного вами при инсталляции XFree86. Если вы инсталлировали XFree86 при помощи Fink, надо вновь инсталлировать пакет xfree86 (или xfree86-rootless для OS 10.2 и более ранних версий). Если вы инсталлировали его самостоятельно, надо получить файлы из копии Xquartz.tgz.

The XKEYBOARD keymap compiler (xkbcomp) reports: >
                Error: Can't find file "unknown" for geometry
                include > Exiting > Abandoning geometry file
                "(null)" Errors from xkbcomp are not fatal to
                the X server

Классификация ошибки: в большинстве случаев безобидная. Как следует из сообщения, это не фатальная ошибка. Насколько мне известно, XDarwin вообще не использует расширение XKB. Возможно, какая-то клиентская программа пытается его тем не менее использовать ...

startx: Command not found.

Классификация ошибки: фатальная. Это может произойти с XDarwin 1.0a2 и 1.0a3, если ваши файлы инциализации оболочки не содержат настроек для добавления /usr/X11R6/bin к переменной величине PATH. Если вы используете Fink и не изменили настройки оболочки по умолчанию, для исправления должно быть достаточно добавления строки source /opt/sw/bin/init.csh к .cshrc в базовом каталоге (как рекомендуется в инструкциях Fink).

_XSERVTransSocketUNIXCreateListener:
                ...SocketCreateListener() failed
                _XSERVTransMakeAllCOTSServerListeners: server already running
Fatal server error: Cannot establish any listening
                sockets - Make sure an X server isn't already running

Классификация ошибки: фатальная. Она происходит после случайного одновременного запуска нескольких копий XDarwin или после некорректного выключения XDarwin (н-р, при зависании). Также это может быть проблема полномочий доступа к файлам разъемов для локальных соединений. Можно попытаться воспользоваться rm -rf /tmp/.X11-unix. В большинстве случаев также помогает повторный запуск компьютера (когда Mac OS X автоматически очищает /tmp, а сетевой пакет перезагружается)

Xlib: connection to ":0.0" refused by
                server Xlib: Client is not authorized to connect to Server

Классификация ошибки: фатальная. Клиентские программы не могут установить соединение с сервером отображения (XDarwin), потому что используют ложные опознавательные данные. Ошибка может быть вызвана некоторыми инсталляциями VNC при запуске XDarwin через sudo и, вероятно, другими непонятными событиями. Обычное исправление состоит в удалении файла .Xauthority (хранящего опознавательные данные) в базовом каталоге и повторном создании пустого файла:

cd rm .Xauthority touch .Xauthority

Еще одна распространенная причина отказов при запуске XFree86 - некорректный файл .xinitrc. Файл .xinitrc запускается и по какой-то причине практически сразу прекращает сеанс.xinit интерпретирует это как "завершение сеанса пользователя" ("the user's session has ended") и уничтожает XDarwin. См. раздел .xinitrc для получения более подробной информации. Не забудьте, что надо настроить PATH и иметь в распоряжении одну долговременную программу, которая запускается не на заднем плане. Хорошей идеей является добавление exec xterm для возврата в исходный режим, когда невозможно найти менеджер окон и т.п.

7.2 Черные иконки на панели GNOME и в меню приложения GNOME

Общая проблема заключается в том, что иконки и другие изображения имеют вид черных прямоугольников или контурных линий. Первоначально это было обусловлено ограничениями в ядре операционной системы. О проблеме сообщили Apple, но пока ее не исправили; более подробно см. Отчеты об ошибках в Darwin.

На данный момент ситуация такова, что расширение MIT-SHM протокола X11 практически не используется в Darwin и Mac OS X. Есть два способа дезактивировать расширение протокола: на сервере и на клиенте. На серверах XFree86, инсталлированных при помощи Fink (т.e. пакетах xfree86-server и xfree86-rootless), оно уже дезактивировано. GIMP и панель GNOME также были модифицированы. Если у вас есть черные иконки в другом приложении, запустите его с использованием опции строки команд --no-xshm.

7.3 Клавиатура не работает в XFree86

Это известная проблема, которая пока, насколько мы знаем, влияет только на портативные компьютеры (PowerBook, iBook). Раньше для ее решения использовалась опция раскладки клавиатуры "Load from file". Сейчас она стала опцией по умолчанию, поскольку старый способ (считывание раскладки из ядра) перестал работать в Mac OS X 10.1. Если у вас эта опция не активирована, можно это сделать в диалоге параметров XDarwin. Надо отметить пункт "Load from file" и выделить файл раскладки клавиатуры для загрузки. После перезагрузки XDarwin ваша клавиатура должна функционировать лучше (см. текст далее).

Если вы запускаете XFree86 со строки команд, можно перенести имя файла раскладки клавиатуры для загрузки в качестве опции, н-р:

startx -- -quartz -keymap USA.keymapping

7.4 Клавиша возврата (Backspace) не действует

Это происходит, когда вы используете опцию "Load keymapping from file", описанную выше. Файлы раскладки описывают клавишу Backspace как "Delete", а не "Backspace". Можно исправить положение, внеся следующую строку в файл .xinitrc:

xmodmap -e "keycode 59 = BackSpace"

Если не ошибаюсь, XDarwin 1.0a2 и более поздние версии имеют код, автоматически корректно отображающий эту клавишу.

7.5 "Warning: locale not supported by C library"

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

8 Подсказки по использованию

8.1 Запуск приложений X11 из окна Terminal.app

Для запуска приложений X11из окна Terminal.app необходимо настроить переменную величину среды "DISPLAY". Данная переменная сообщает приложению, где можно найти окно сервера X11. При настройке по умолчанию - когда XDarwin запускается на одной машине - можно установить следующую настройку переменной:

Хорошим решением является настройка, при которой XDarwin.app запускается при вашем входе в систему (настройку можно сделать на панели регистрации пользователей в параметрах системы в Mac OS 10.2 и на панели счетов пользователей в пунктах запуска в Mac OS 10.3):

Таким образом DISPLAY настраивается в любой оболочке. При этом данная настройка не превалирует над текущим значением, если DISPLAY уже настроен. Таким образом все еще можно запускать приложения X11 дистанционно или через ssh с туннелированием X11.

8.2 Запуск приложения Aqua apps из xterm

Одним из способов запуска приложений Aqua из xterm (или любой другой оболочки) является команда open. Примеры:

open /Applications/TextEdit.app open SomeDocument.rtf
                open -a /Applications/TextEdit.app index.html

Во втором примере документ должен открываться в приложении, которое с ним связано; в третьем примере указано приложение, которое необходимо использовать.

8.3 Копирование (Copy) и вставка (Paste)

Copy и Paste в основном работают между средами Aqua и X11. Все еще возникают некоторые ошибки. Есть жалобы о том, что Emacs слишком требователен в текущем выборе. Copy и Рaste не работают между Classic и X11.

Так или иначе, решение заключается в использовании правильного способа в зависимости от имеющейся среды. Для переноса текста из Aqua в X11 используйте Cmd-C в Aqua, затем перенесите окно направления на передний план и для вставки примените "среднюю клавишу мышки" или Alt-щелчок, если у вас одноклавишная мышка (эту конфигурацию можно настроить в параметрах XDarwin). Для переноса текста из X11в Aqua просто выделите текст мышкой в X11, затем вставьте его при помощи Cmd-V в Aqua.

В системе X11 есть несколько отдельных буферов обмена (называемых в X11 "cut buffers") и некоторые приложения не знают, какой из них следует использовать. В частности, по этой причине иногда не работает вставка в GNU Emacs или XEmacs. Программа autocutsel может в этом помочь; она автоматически синхронизирует два основных буфера для вырезанных объектов. Для ее запуска надо инсталлировать пакет Fink autocutsel и добавить следующую строку к .xinitrc:

autocutsel &

(Она обязательно должна находиться передстрокой выполнения менеджера окна и никогда не должна быть на заднем плане! Не надо добавлять ее в конце - она просто не будет выполняться.) Запомните, что это больше не требуется для X11 Apple (см. Замечания об использовании X11 Apple).

Если вы используете X11 Apple, можно применять Command-C или Edit->Copy, обычные для приложений Mac, для копирования текста в буфер, а среднюю клавишу мышки или Command-V для вставки из буфера в X11 Apple.

В любом случае, если вы сталкиваетесь с проблемами копирования или вставки из Aqua в X11 и наоборот, сначала надо попытаться сделать вставку дважды (иногда копия не получается при однократной попытке), затем использовать промежуточные приложения, н-р, TextEdit или Terminal.app для Aqua и nedit или xterm для X11. По моему опыту, всегда можно найти решение.


Copyright Notice

Copyright (c) 2001 Christoph Pfisterer, Copyright (c) 2001-2020 The Fink Project. You may distribute this document in print for private purposes, provided the document and this copyright notice remain complete and unmodified. Any commercial reproduction and any online publication requires the explicit consent of the author.


Generated from $Fink: x11.ru.xml,v 1.6 2023/08/04 5:08:13 nieder Exp $