Funkcja VendorString() nie działa, zawsze jest to Sun Microsystems, nawet jeśli Xorg jest zbudowany dla systemu Solaris.Jak programowo odróżnić Xsun od Xorg?
Odpowiedz
Jest to prawdopodobnie trochę hacky, ale jeśli spojrzysz na listę rozszerzeń zwróconych przez Xsun i Xorg, powinieneś zauważyć, że Xorg ma kilka dodatkowych rozszerzeń pochodnych XFree86.
xdpyinfo
może być użyty do wyświetlenia rozszerzeń za pomocą wiersza poleceń w celu sprawdzenia różnic; programowo można użyć XListExtensions()
lub XQueryExtension()
.
(Nie mam serwera Xsun X pod ręką, ale jestem całkiem pewny, gdy spojrzałem w przeszłości, że różniły się dość abit).
$ xdpyinfo | grep vendor vendor string: The X.Org Foundation vendor release number: 10601901
To jest xorg-server 1.6.1 na Linux. Mam nadzieję, że XOrg i XSun na Solaris będą się tutaj różnić.
Do produkcji tych dwóch pól, xdpyinfo
wywołuje ServerVendor
macro do ustalenia ze sprzedawcą, a następnie analizuje Powrót VendorRelease
macro różnie w zależności od tego, co było ServerVendor
.
Nawiasem mówiąc, co to jest VendorString()
? Nie mam funkcji ani makra o tej nazwie ...
Dziękujemy! Łańcuch Oops, VendorRelease() to jest. W każdym razie niestety nie możemy obstawić tego ciągu. Zmienia się wystarczająco często, aby mieć kłopoty, zarówno dla Xsun, jak i dla Xorg. Znalazłem rozwiązanie działające (miejmy nadzieję) dla nich i dla różnych innych (pochodnych) serwerów, takich jak Xvfb, Xnest itp.
Xsun używa trzeciej wartości w tablicy keysymów dla kodów klawiszy KP_ (numpad). Xorg używa 1-st lub 2-go. Najpierw należy sniffer, uzyskać kod klucza KP_ keysym, na przykład XK_KP_7, sekunda, powąchać zawartość XKeycodeToKeysym (d, keycode, [0-3]). Nasz XK_KP_7 znajdzie się na indeksie 2 dla Xsun.
Wow, to brzmi jak jeszcze brzydsze włamanie niż rozwiązanie Dave'a, ale dopóki działa ...! – ephemient
To wydaje się być dobrym miejscem do napisania testu jednostkowego! –
Tylko Xsun będzie miał Adobe-DPS - Sun nie uwzględnia tego w naszym porcie Xorg. – alanc