Comment appliquer en plein écran sur les deux moniteurs de l'affichage à deux têtes?

2

J'ai deux machines Ubuntu 10.4 (et Ubuntu continue de cacher de plus en plus de config xorg.conf de telle sorte que je ne sais plus où les trouver). L’un est un ordinateur portable à 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 utilisant à la fois les formats VGA1 et HDMI1 (qui est en fait un port d'affichage avec un adaptateur DVI) en 1600x900. Donc, dans les deux cas, mon bureau est 3200x900. J'exécute un serveur VNC sur l'ordinateur portable et me connecte à celui-ci (via un tunnel SSH) à partir du bureau. Lorsque j'appuie sur la touche de raccourci plein écran, j'obtiens une vue 1600x900 de la machine distante sur un moniteur et la moitié de mon bureau local sur l'autre moniteur - le "plein écran" ne se développe que pour remplir un moniteur local.

Normalement, c’est exactement ce que vous voulez lorsque vous utilisez en plein écran un navigateur Web, un client de messagerie ou une autre application. Je suis sûr qu'il existe une certaine magie X pour expliquer ce qu'est un plein écran, et l'application cliente vnc accepte consciencieusement ce qu'elle dit. Bien que je souhaite conserver le comportement normal en plein écran pour les applications standard, mais lorsque je passe en VNC sur un autre ordinateur 3200x900, je souhaite vraiment que le mode plein écran s’étende sur les deux écrans locaux. Redimensionner la fenêtre pour qu'elle soit "proche" n'est pas suffisant, car j'ai toujours des panneaux locaux en haut et en bas d'un écran (bien que je puisse les configurer pour le masquage automatique), plus le bord de la fenêtre de l'application client VNC (car il ne t semble respecter -notitle).

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

Eric Angell
la source

Réponses:

3

J'ai creusé un peu. La version moderne de la magie X11 imaginée est en réalité la magie du gestionnaire de fenêtres, _NET_WM_STATE_FULLSCREEN . Mon client VNC utilise en fait cette demande et est étendu à un seul moniteur. Il semble que cela devrait d'abord être défini sur _NET_WM_FULLSCREEN_MONITORSDécrire quels moniteurs utiliser comme bords supérieur / inférieur / gauche / droit, mais ce n’est pas le cas. Cependant, j'ai tiré la source de dpkg et ai fouillé pour la pirater. Même avec _NET_WM_FULLSCREEN_MONITORS, je ne pouvais pas obtenir le comportement correct. Le client VNC sait qu’il souhaite passer à 3200x900 et tente plusieurs fois (30) de le redimensionner (en définissant les largeurs et hauteurs de base et maximales dans XA_WM_NORMAL_HINTS, puis en utilisant XResizeWindow ()), mais il est toujours ignoré. Peut-être que compiz se comporte mal?

Mais le client VNC a également du code pour traiter directement avec X au lieu de passer par un gestionnaire de fenêtres. Lorsque je coupe le code de détection WM, la fenêtre racine est modifiée plus directement (XtNoverrideRedirect, XReparentWindow au sommet, XMapRaised, etc.) et cela fonctionne comme un charme (tant que je désactive également le code de détection dans la fonction un-fullscreen) ) Cela fonctionne sans doute encore mieux: les touches alt-tab et autres clés de gestion de la fenêtre sont maintenant transmises à la machine distante jusqu'à ce que la fenêtre du client VNC disparaisse en plein écran.

Donc, il peut être hacky et autrement avoir quelques pièges *, mais au moins pour le moment je l'ai eu à se comporter de manière acceptable dans mon esprit.

*: la suppression du plein écran ne permet pas de redessiner correctement la fenêtre racine ou d’autres fenêtres qui ont été recouvertes. Toutefois, le passage à une fenêtre d'affichage différente, puis le retour en arrière oblige à effectuer un nouveau rafraîchissement, ce qui constitue une solution de contournement acceptable.

Eric Angell
la source
1
Apparemment, je ne peux pas publier plus de 2 liens dans une réponse car je suis un utilisateur trop novateur (c'est stupide). D'autres ressources que j'ai utilisées incluent un rapport de bogue Compiz (je ne sais pas exactement si le correctif m'aidera, mais il n'apparaîtra pas dans Ubuntu avant avril 2011 dans Natty), un courriel contenant une liste de compiz décrivant _NET_WM_STATE_FULLSCREEN,
Eric. Angell
et un programme de test lié à cet e-mail indiquant comment utiliser correctement _NET_WM_FULLSCREEN_MONITORS.
Eric Angell
0

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

Je définis la commande pour exécuter 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 sous 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)

Ce ne sont pas une solution exacte à votre situation, mais vous pouvez éventuellement envisager de définir le logiciel que vous utilisez avec une certaine taille / emplacement équivalent à un écran (double) complet? Tous n’auront pas ce genre d’option, mais cela vaut peut-être la peine d’être examiné.

skm
la source