VendorString() non funziona, è sempre Sun Microsystems, anche se è stato creato da Xorg per Solaris.Come distinguere Xsun da Xorg, a livello di programmazione?
risposta
È probabilmente un po 'hacky, ma se si guarda l'elenco delle estensioni restituite da Xsun e Xorg si dovrebbe vedere che Xorg ha alcune estensioni derivate da XFree86.
xdpyinfo
può essere utilizzato per elencare le estensioni tramite la riga di comando per verificare le differenze; a livello di codice è possibile utilizzare XListExtensions()
o XQueryExtension()
.
(Non ho un Xsun X Server a portata di mano, ma sono abbastanza sicuro che quando ho guardato in passato hanno differito abbastanza abit).
$ xdpyinfo | grep vendor vendor string: The X.Org Foundation vendor release number: 10601901
Si tratta di xorg-server 1.6.1 su Linux. Speriamo che XOrg e XSun su Solaris differiscano qui.
All'uscita questi due campi, xdpyinfo
chiama il ServerVendor
macro per determinare il fornitore, quindi analizza il ritorno del VendorRelease
macro diverso a seconda del ServerVendor
era.
A proposito, che cos'è VendorString()
? Non ho una funzione o una macro con quel nome ...
Grazie! Oops, VendorRelease() stringa è. Comunque, sfortunatamente non possiamo scommettere su questa corda. Cambia spesso abbastanza da avere problemi, sia per Xsun che per Xorg. Ho trovato una soluzione funzionante (si spera) per loro e per vari altri server (derivati) come Xvfb, Xnest ecc.
Xsun utilizza un terzo valore in un array di chiavi per KP_ (tastierino numerico). Xorg usa 1 ° o 2 °. Per prima cosa uno sniffer deve ottenere un keycode per un keysym KP_, ad esempio XK_KP_7, secondo, annusare ciò che è in XKeycodeToKeysym (d, keycode, [0-3]). Il nostro XK_KP_7 sarà sull'indice 2 per Xsun.
Wow, sembra un attacco ancora più brutto della soluzione di Dave, ma finché funziona ...! – ephemient
Questo sembra un buon posto per scrivere un test unitario! –
Solo Xsun avrà Adobe-DPS - Sun non lo include nella nostra porta Xorg. – alanc