Как отличить Xsun от Xorg программно? - PullRequest
5 голосов
/ 23 июня 2009

VendorString () не работает, это всегда Sun Microsystems, даже если это Xorg, созданный для Solaris.

Ответы [ 3 ]

2 голосов
/ 23 июня 2009
$ xdpyinfo | grep vendor
vendor string:    The X.Org Foundation
vendor release number:    10601901

Это xorg-сервер 1.6.1 в Linux.Надеемся, что XOrg и XSun в Solaris будут отличаться здесь.

Чтобы вывести эти два поля, xdpyinfo вызывает макрос ServerVendor для определения поставщика, а затем анализирует возврат VendorRelease макрос по-разному в зависимости от того, что было ServerVendor.

Кстати, что такое VendorString()?У меня нет функции или макроса с таким именем ...

1 голос
/ 23 июня 2009

Возможно, это немного странно, но если вы посмотрите на список расширений, возвращаемых Xsun и Xorg, вы увидите, что Xorg имеет несколько дополнительных расширений, полученных из XFree86.

xdpyinfo может использоваться для вывода списка расширений через командную строку для проверки различий; программно вы можете использовать XListExtensions() или XQueryExtension().

(У меня нет Xsun X Server, но я уверен, что когда я смотрел в прошлое, они отличались совсем немного).

0 голосов
/ 24 июня 2009

Спасибо! К сожалению, это VendorRelease (). Во всяком случае, к сожалению, мы не можем делать ставки на эту строку. Он меняется достаточно часто, чтобы иметь проблемы, как для Xsun, так и для Xorg. Я нашел решение, работающее (надеюсь) для них и для различных (производных) серверов, таких как Xvfb, Xnest и т. Д.

Xsun использует третье значение в массиве ключей для кодов клавиш KP_ (numpad). Xorg использует 1-й или 2-й. Сначала сниффер должен получить код ключа для ключа ключа KP_, например XK_KP_7, во-вторых, узнать, что находится в XKeycodeToKeysym (d, keycode, [0-3]). Наш XK_KP_7 будет в индексе 2 для Xsun.

...