VendorString() no funciona, siempre es Sun Microsystems, incluso si es Xorg construido para Solaris.¿Cómo distinguir Xsun de Xorg, programáticamente?
Respuesta
Es posiblemente un poco hacky, pero si nos fijamos en la lista de extensiones devueltas de Xsun y Xorg, debería ver que Xorg tiene algunas extensiones adicionales derivadas de XFree86.
xdpyinfo
se puede utilizar para mostrar las extensiones a través de la línea de comandos para verificar las diferencias; programáticamente puede usar XListExtensions()
o XQueryExtension()
.
(No tengo a mano un servidor Xsun X pero estoy bastante seguro de que cuando lo he visto en el pasado han diferido bastante).
$ xdpyinfo | grep vendor vendor string: The X.Org Foundation vendor release number: 10601901
Esta es xorg-server 1.6.1 en Linux. Esperemos que XOrg y XSun en Solaris difieran aquí.
A la salida de estos dos campos, xdpyinfo
llama al ServerVendor
macro para determinar el proveedor, a continuación, analiza el retorno de la VendorRelease
macro de manera diferente dependiendo de lo que era ServerVendor
.
Por cierto, ¿qué es VendorString()
? No tengo una función o macro con ese nombre ...
¡Gracias! Vaya, VendorRelease() es la cadena. De todos modos, lamentablemente no podemos apostar a esta cadena. Cambia con la frecuencia suficiente como para causar problemas, tanto para Xsun como para Xorg. He encontrado una solución que funciona (con suerte) para ellos y para varios otros servidores (derivados) como Xvfb, Xnest, etc.
Xsun utiliza un tercer valor en una matriz de keysyms para códigos de tecla KP_ (teclado numérico). Xorg usa 1-st o 2-nd. En primer lugar, un sniffer debe obtener un código clave para un KP_ keysym, por ejemplo XK_KP_7, segundo, olfatear lo que está en el XKeycodeToKeysym (d, keycode, [0-3]). Nuestro XK_KP_7 estará en el índice 2 para Xsun.
¡Guau, eso se siente como un truco aún más feo que la solución de Dave, pero mientras funcione ...! – ephemient
¡Parece un buen lugar para escribir una prueba unitaria! –
- 1. cómo agregar la entrega de eventos Xorg en g_main_loop
- 2. Obtención de la lista de todas las pantallas Xorg
- 3. RAISERROR-¿Cómo distinguir con SqlException?
- 4. ¿Cómo distinguir las leyendas de los ejes en Matlab?
- 5. ¿Cómo puedo distinguir entre gráficos y fotografías?
- 6. ¿Cómo puedo distinguir dos archivos en Perl?
- 7. ¿Cómo distinguir varios teclados en Delphi?
- 8. Configuración del brillo del color en Linux/Xorg
- 9. Distinguir cierre y variables locales
- 10. C++: type_info para distinguir tipos
- 11. ¿Cómo distinguir un marco de una biblioteca de funciones?
- 12. Distinguir instrumentos en un archivo de música
- 13. Pylint: distinguir nuevos errores de los anteriores
- 14. Cómo distinguir líneas superiores de dos archivos sin archivo intermedio
- 15. ¿Cómo puedo distinguir entre segmentos de texto superpuestos usando HTML?
- 16. Cómo distinguir cadena constante de char * en C macro
- 17. eclipse: cómo diferenciar/distinguir diferentes espacios de trabajo abiertos
- 18. Cómo distinguir diferentes tipos de flotador NaN en Python
- 19. ¿Cómo distinguir dos clics en elementos de menú en ActionBarSherlock?
- 20. Cómo distinguir entre múltiples dispositivos de entrada en C#
- 21. ¿Cómo puedo distinguir $ _ en operadores de listas anidadas en Perl?
- 22. Distinguir visualmente Windows de Visual Studio 2010
- 23. RestKit: distinguir múltiples solicitudes en didLoadResponse:
- 24. Cómo detecto bots programáticamente
- 25. Cómo registrar programáticamente PerformanceCounter
- 26. ¿Cómo crear videos programáticamente?
- 27. ¿Cómo habilitar programáticamente assert?
- 28. ¿Cómo cerrar BalloonTip programáticamente?
- 29. Git: distinguir entre etiquetas locales y remotas
- 30. ¿Cómo configuro ELMAH programáticamente?
Solo Xsun tendrá Adobe-DPS; Sun no lo incluye en nuestro puerto Xorg. – alanc