5 votes

Comment afficher une application en plein écran sur les deux moniteurs d'un écran à double tête ?

J'ai deux machines Ubuntu 10.4 (et Ubuntu continue à cacher de plus en plus de configuration xorg.conf de telle sorte que je ne sais plus où la trouver). L'une est un ordinateur portable fonctionnant en double tête - DP1 est l'écran interne, et VGA1 est un moniteur externe ; les deux fonctionnent à 1600x900. L'autre machine est un ordinateur de bureau qui utilise à la fois VGA1 et HDMI1 (qui est en fait un port d'affichage avec un adaptateur DVI) à 1600x900. Dans les deux cas, mon bureau est donc en 3200x900. J'exécute un serveur VNC sur l'ordinateur portable et je m'y connecte (via un tunnel SSH) à partir du bureau - lorsque j'appuie sur la touche de raccourci plein écran, j'obtiens une vue de la machine distante en 1600x900 sur un moniteur, et la moitié de mon bureau local sur l'autre moniteur - le "plein écran" ne s'étend que pour remplir un moniteur local.

Normalement, c'est exactement ce que vous voulez lorsque vous faites un plein écran d'un navigateur Web, d'un client de messagerie ou d'une autre application. Je suis sûr qu'il y a une certaine magie X pour rendre clair ce qu'un plein écran implique réellement, et l'application client vnc ne fait qu'accepter consciencieusement ce qu'on lui dit. J'aimerais conserver le comportement normal du plein écran pour les applications ordinaires, mais lorsque je me connecte par VNC à une autre machine en 3200x900, j'aimerais vraiment que le plein écran s'étende sur les deux écrans locaux. Redimensionner la fenêtre pour qu'elle soit "proche" n'est pas tout à fait suffisant puisque j'ai toujours des panneaux locaux en haut et en bas d'un écran (bien que je puisse les configurer pour qu'ils soient auto-cachés), plus la bordure de la fenêtre de l'application client VNC (puisqu'elle ne semble pas respecter -notitle).

Existe-t-il un bon moyen de faire mentir X à une seule application concernant la taille "plein écran" ? Puis-je faire en sorte qu'il mente à toutes les applications ? xrandr --noprimary semble n'avoir aucun effet.

5voto

Eric Angell Points 608

J'ai fait quelques recherches. La version moderne de la magie de X11 dont je faisais l'hypothèse est en fait la magie du gestionnaire de fenêtres, _NET_WM_STATE_FULLSCREEN . Mon client VNC utilise en fait cette requête et est étendu à un seul moniteur. Il semble qu'il doive d'abord définir _NET_WM_FULLSCREEN_MONITORS pour décrire les moniteurs à utiliser comme bords supérieur/inférieur/gauche/droit, mais ce n'est pas le cas. Cependant, j'ai récupéré les sources de dpkg et j'ai creusé pour les modifier. Même avec _NET_WM_FULLSCREEN_MONITORS je n'ai pas pu obtenir le comportement correct. Le client VNC sait qu'il veut passer à 3200x900, et il tente plusieurs fois (30) de redimensionner à cela (en définissant les largeurs et hauteurs de base et maximale dans XA_WM_NORMAL_HINTS, puis en utilisant XResizeWindow()) sur la fenêtre supérieure, mais c'est toujours ignoré. Peut-être que compiz se comporte mal ?

Mais le client VNC a aussi du code pour traiter avec X directement au lieu de passer par un gestionnaire de fenêtres. Lorsque je supprime le code de détection WM, il modifie la fenêtre racine plus directement (XtNoverrideRedirect, XReparentWindow to the top, XMapRaised, etc) et cela fonctionne à merveille (tant que je désactive également le code de détection dans la fonction un-fullscreen). On peut même dire que cela fonctionne encore mieux : alt-tab et les autres touches de gestion de fenêtre sont maintenant transmises à la machine distante jusqu'à ce que je désécranne la fenêtre du client VNC.

Il se peut donc que ce soit un peu compliqué et qu'il y ait quelques problèmes*, mais au moins, pour l'instant, j'ai réussi à le faire se comporter de manière acceptable dans mon esprit.

* : le dé-fullscreening ne redessine pas correctement la fenêtre racine ou les autres fenêtres qui avaient été couvertes. Mais le fait de passer à une fenêtre différente, puis de revenir à la fenêtre précédente, oblige à redessiner la fenêtre, ce qui est une solution de rechange acceptable.

1 votes

Apparemment, je ne peux pas poster >2 liens dans une réponse parce que je suis un utilisateur trop récent (c'est stupide). Parmi les autres ressources que j'ai utilisées, citons rapport de bug de compiz (Je ne sais pas exactement si le correctif m'aiderait, mais il n'apparaîtra pas dans Ubuntu avant avril 2011 dans Natty), un liste compiz email discuter de _NET_WM_STATE_FULLSCREEN,

0 votes

Et un programme de test lié à cet email montrant comment utiliser correctement _NET_WM_FULLSCREEN_MONITORS.

0 votes

Je ne sais pas si c'est nouveau, mais avez-vous il y a une option dans vncviewer qui s'appelle -FullScreenAllMonitors et qui dit Utiliser tous les moniteurs locaux et pas seulement le moniteur actuel lors du passage en mode plein écran.

0voto

Dennis Points 373

Une autre possibilité à explorer pourrait être la capacité de certains programmes à être forcés à une certaine taille/un certain emplacement lorsqu'ils démarrent.

Je définis la commande pour lancer Opera via une icône E17 comme ceci :

/usr/local/bin/opera-11.01 -geometry 1600x3200-0+100 %U

Cela définit la taille et l'emplacement de la fenêtre d'Opera.

Et dans Xemacs, je ne peux pas contrôler l'emplacement, mais je peux spécifier la taille de la fenêtre à exécuter au démarrage dans mon init.el :

(set-frame-size (window-frame) 140 80 )

Il ne s'agit pas d'une solution exacte à votre situation, mais vous pouvez peut-être envisager de paramétrer le logiciel que vous exécutez à une certaine taille/un certain emplacement équivalent à un plein (double) écran ? Tous ne disposent pas de ce type d'option, mais cela vaut peut-être la peine de s'y intéresser.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X