Obtention de la liste de tous les affichages Xorg
Je voudrais savoir comment je peux obtenir une liste de tous Xorg affiche sur mon système, avec une liste d'écrans associés à chaque affichage. J'ai passé un certain temps à la recherche par le biais de la Xlib documentation, mais n'a pas été en mesure de trouver une fonction qui fait ce que je veux. Veuillez supposer que j'ai pas d'autres dépendances autres que POSIX-plainte de l'OS et de X (par exemple, pas de GTK). Si ce que je demande n'est pas possible en supposant que ces dépendances minimales, puis une solution à l'aide d'autres bibliothèques est très bien.
Merci beaucoup pour votre aide!
source d'informationauteur void-pointer
Vous devez vous connecter pour publier un commentaire.
Le seul moyen que je connaisse pour obtenir une liste des écrans est de vérifier la
/tmp/.X11-unix
répertoire.Une fois que vous faites cela, vous pouvez utiliser la Xlib pour chaque requête d'affichage pour plus d'informations.
Par exemple:
L'exécution de la ci-dessus me donne cette sortie avec mon actuelle affiche/écrans:
Jamais trouvé un meilleur moyen de l'inscription de X affiche les autres que cela. J'aurais beaucoup aimé savoir si l'un de meilleure alternative existe.
Comme netcoder a écrit, le problème comporte deux parties distinctes:
Connexion au serveur X
Le processus établit une connexion à un serveur X à l'aide de
XOpenDisplay()
. La connexion est déchiré vers le bas à l'aide deXCloseDisplay()
. netcoders code dans ce fil en est un bon exemple de comment le faire correctement.Comme netcoder mentionné, le problème est qu'il n'y a aucun moyen fiable de savoir qui des serveurs X un processus peut se connecter. Son code vérifie l'emplacement par défaut où les X douilles,
/tmp/.X11-unix/
. Cette approche ne pas travail à tous si l'utilisateur est connecté à distance, par exemple via SSH (avec le X forwarding est activé). Dans ce cas, il n'y a vraiment que lesDISPLAY
variable d'environnement (et peut-être quelques astuces wrt.~/.Xauthority
fichiers).Malheureusement, je ne connais pas de meilleure méthode. Personnellement, je préfère utiliser de l'utilisateur du fichier de configuration -- dire
~/.application/displays
--, où l'utilisateur peut répertorier les noms de serveur l'application doit essayer de se connecter dans le même format que leDISPLAY
variable d'environnement, en plus de celui par défaut. Il n'est pas automatique (netcoder du code de l'est), mais cette approche me convient mieux.De découvrir sur les écrans fournis par un serveur X
XScreenCount()
retourne le nombre d'écrans fournis par le serveur X, le processus est actuellement connecté. Si vous avez uniquement besoin des dimensions de l'écran, suivez netcoders exemple. Pour de plus amples informations, utilisezXScreenOfDisplay(Display,index)
pour obtenir leScreen
pointeurs;0
<=index
<XScreenCount(Display)
.Dans le code C, les macros
ScreenCount()
etScreenOfDisplay()
sont généralement un peu plus efficace que les appels de fonction.