Disper: egyszerű váltás a kijelzők közt

Szerencsére hamar sikerült rájönnöm, hogy hogyan tudom rávenni a Gnome energiakezelőjét, hogy az ég világon semmit ne csináljon, ha nem akkumulátorról megy a laptop és lecsukom a fedőt. A Google mindent elárult a „gnome power management do nothing when lid closed” kérésemre, ezüst tálcán kínálta fel a megoldást. Egy sort kellett begépelnem, aminek a hatására a Gnome „registryje” egy új paraméterrel bővül. Tiszta Windows érzés. A parancs ez:

gconftool-2 --type string --set /apps/gnome-power-manager/buttons/lid_ac "nothing"

Már csak azt nem értem, hogy mi a fészkes fenéért nincs alapból a Gnome-ban ez az opció, miért kell helyette a zavarosban turkálni. De hát ez a tipikus hozzáállás, nem csalódtam pozitívan.

Az előző probléma megoldására még könnyedén rá tudtam jönni a webes tartalomkeresők segítségével, de arra nem annyira, hogy a fedő lecsukására, gomb megnyomására, a fejem megvakarására vagy bármilyen egy mozdulatot igénylő műveletre hogyan tudom elérni, hogy csak a külső monitor legyen aktív kijelző, a laptop monitorát egyszerűen kapcsolja ki (tehát a Gnome panel és az ablakok húzzanak el onnan, át a külső monitorra) és ne kelljen hozzá újraindítanom ezt a „jaj, de szeretem” X-et. Még TwinView-ra sincs szükségem, mert vagy ezt szeretném épp használni, vagy azt, mindkettőt egyszerre nem igazán. Az nVidia beállító felületén össze lehet kattogni a beállításokat, de az bizony sok lépéses művelet.
Aztán megtaláltam a megoldást. A neve: disper. A telepítése és használata nagyon egyszerű Ubuntun. Mivel a Launchpad hosztolja a holland fejlesztő projektjét, csak fel kell venni a csomagtárolóját, frissíteni kell a rendszer csomagadatbázisát és telepíteni kell:

sudo add-apt-repository ppa:wvengen/ppa
sudo apt-get update && sudo apt-get install disper

Ha a másodlagos monitorra akarok váltani, akkor a következő parancsot kell kiadnom:

disper -S

Ha a laptop kijelzőjét használnám inkább, akkor ennyi a teendő:

disper -s

Én még írtam egy nagyon buta szkriptet, ami a kettő között vált, hogy aztán futási jogot adva neki hozzárendeljek egy billentyűparancsot Gnome-ban:

#!/bin/bash

if [ -f /tmp/ext-screen.enabled ]; then
  disper -s
  rm /tmp/ext-screen.enabled
else
  disper -S
  touch /tmp/ext-screen.enabled
fi

Hozzászólások

A legtöbb laptopon eleve van egy billentyűkombináció, ami pont ezt csinálná. Nálam Fn+F7.
Nekem elég lenne, ha az NVidia driver tudná, mi a dolga, ha megnyomom.

man xrandr megvolt?

Nem akkora rakétatudomány ez, minden manapság használatos vason és X verzión és driveren működik, általános, és nem kell hozzá PPA.
Egyszerűsíts.

Sosem volt még laptopom ezelőtt, úgyhogy ez nekem új. :) Kösz a tippet.

Update: Nem listázza a külső monitort az xrandr. A Rendszer > Beállítások > Monitorok sem működött soha, helyette az nvidia-settingst ajánlotta föl.
Különben az Fn+F8-ra is azt mondja az Ubuntu, hogy "A monitor beállításai nem válthatók át", akár a dokkolón, akár a laptop VGA csatlakozóján van. A Disper viszont működik.

Ezekszerint továbbra sincs az nVidiának xrandr támogatása...

Ezt a Dispert viszont ki fogom próbálni az asztali gépemen.
Egyszer be kéne állítanom a kétmonitoros üzemmódot, remélem, sikerül hasonló eredményt elérnem mint az ati+xrandr párossal.

A legutóbbi próbálkozásom nVidián nem győzött meg igazán, de lehet, hogy nem voltam elég kitartó...
...képem ugyan volt mindkét monitoron, de túlságosan egyben akarta kezelni, én pedig azt, hogy lehetőleg egy ablak egy monitoron maradjon, ha teljes képernyőre teszem. Rossz irányból közelítettem a témát, azt hiszem...

Nálam úgy tűnt, hogy programfüggő, hogy a teljes képernyő épp 1600x900-at (a laptopom kijelzőjének felbontása), 1680x1050-et (a monitorom felbontása), vagy 3280x1050-et jelent. A Speed Dreams és az OpenTTD például mindenáron a TwinView miatti összeadódott felbontást vette alapul teljes képernyőben, a FreeCol és a Virtualbox viszont annak a kijelzőnek megfelelő felbontást, amelyik kijelzőn volt épp az ablak. De nekem nem kell a TwinView. A klónozás is ment a képernyőkön, de jobb így, hogy csak az egyik működik és válthatok köztük. Kár, hogy az Fn+F8-ra nem megy a dolog, Disper meg minden nélkül, de így is ugyanazt érem el.

Nálam notebookon úgy működik, hogy tudom húzgálni az ablakokat a két kijelző között, kézzel át is tudom nyújtani két kijelzőre, de ha a jobb felső sarokban maximális méretre hozom, az adott kijelzőhöz igazodik.
Ugyanígy él, hogy a fejlécet megfogva le tudom hozni ablak méretre és a másik kijelzőn ki tudom rakni teljes képernyőre (ezt mondjuk nem használom, csak feltűnt).

Az is tetszik, hogy mindezt videóval is megcsinálja, nem csak az egyik képernyőn mozog a kép akkor sem, ha a két kijelző határán állítom meg az ablakot.

Megpróbáltam nvidiás gépen ezt a Dispert. Engedélyezi a kimenetet, berakja clone módba (igaz, a legkisebb közösen támogatott felbontással), kirakja dualview-ba, de a konsole ablak rögtön szétnyúlt és az alap monitoromon csak az ablak jobb szélét láttam, a bal széle pedig nem volt sehol, mert a másik kijelző csak 1024x768-as... ez viszont nem tetszik.

Egyébként van egy TV-kártya a gépemben, időnként jó lenne a TV-ablakot másik kijelzőre rakni, hogy használni is lehessen közben a gépet és ne legyen kényelmetlen sem a használata.
Egyelőre ott tartok, hogy ati + nyílt driverrel simán menne, nVidiával meg talán xorg szerkesztéssel lehet küzdeni.

Most ez van az xorg.conf-ban:

Section "Device"
Identifier "device1"
Driver "nvidia"
Option "TwinView" "True"
Option "MetaModes" "1280x1024,1024x768; 800x600,NULL; 640x480,NULL"
Option "TwinViewOrientation" "Above"
Option "FlatPanelProperties" "Dithering = enabled"
Option "Xinerama" "on"
EndSection

Így majdnem jó, nem akarja széthúzni mindenáron az ablakokat, hanem hozzáigazítja a felbontáshoz.
Bár azzal voltak gondjaim, hogy másik kijelzőn nyitotta meg az ablakot. :)

Ami nem tetszik viszont, hogy én alapvetően kikapcsolt állapotban szeretném tartani és csak akkor engedélyezni, ha szükségem van a második monitorra. Ez valahogy nem megy gördülékenyen, ráadásul a KDM eltolja a háttérképet az elsődleges monitoron, amikor az indítási animációját adja...

Hogyan lehetne megoldani, hogy mindaddig ne legyen bekapcsolva a kimenet, ameddig nem aktiválom, de utána a fentieknek megfelelően működjön? ...és a bekapcsolásához ne kelljen újraindítani az X-et...

Nekem arra a képernyőre tette TwinView-ban a GDM a bejelentkező mezőt (és a képernyőzár feloldó ablaka is így viselkedett), ahol a kurzor volt.

"Hogyan lehetne megoldani, hogy mindaddig ne legyen bekapcsolva a kimenet, ameddig nem aktiválom, de utána a fentieknek megfelelően működjön? ...és a bekapcsolásához ne kelljen újraindítani az X-et..."
Ez a Google-találat szerint – ha jól értelmeztem – a

disper -e -t <top|left|right|bottom>

kibővíti a képernyőt az adott irányba. Mindjárt kipróbálom.

Szerk.: Nálam disper -e -t right-ra úgy csinált, mint nvidia-settingsben TwinView-ra úgy, hogy a külső monitor logikailag jobbra van a default képernyőtől, disper -s-re pedig visszaváltott a laptop képernyőjére.

Köszönöm a válaszod.

Az a baj, hogy a disper nálam tönkreteszi a beállításokat és újra széthúzza a rendszer az összes ablakot a két monitoron.

A KDM képernyőm amúgy jó helyen van, csak a bejelentkezés közben kiadott animáció háttere csúszik el.

Egyébként azt kezdtem el nézni, hogy valószínű, az nvidia-settingsnek meg lehet adni ezeket a paramétereket menet közben, tehát ha jól sejtem, parancssorból megfelelően paraméterezve működnie kéne, ahogyan a disper is el tudja állítani az xorg.conf-ban megadott opciókat.
Tehát egyelőre számomra disper felejtős, az nvidia-settings-zel játszadoznom kell még. Most van egy kis dolgom, de folytatom még. :)

Szóval ha jól értem, hogy mit akartál, akkor szerintem állítsd be az nvidia-settingsben, hogy a másodlagos monitor legyen disabled és mentsd is el az xorg.conf-ba a programon keresztül. Aztán ha mindkét monitort használni akarod, akkor disper -e -t $irány, ha vissza, akkor disper -s. Én így csinálnám, de nem biztos, hogy jól értettelek. :)

feliratkozás

Thinkpad R60+Ati X1400+Linux Mint, nagyon szépen működik, igaz nem parancssorból (nem vált a disper -s,-S -sel) hanem Fn+F7 billentyű kombinációval

Sokat gugliztam, mire ide eljutottam, de köszönöm a leírást!
És a ki picurka szkriptet is! Működik arra, amire nekem kell. Egyszerű.
:)

Egy kérdésem volna még:
A szkriptet betettem az /etc/acpi/ könyvtárba thinkmonitor.sh névvel (chmod +x is megvolt)
Az /et/acpi/event/ -be pedig egy fnf7 fájlt, amiben

event=ibm/hotkey HKEY 00000080 00001007
action=/etc/acpi/thinkmonitor.sh

szerepel.

Szimpla júzerként valahogy nem megy FnF7-tel, gondolom jogosultsági problémák lehetnek, de erre nem jöttem rá, hogyan állítsam be.
Esetleg valamely más, mindenki által elérhető könyvtárba tegyem?

Köszi,
Cappa.

----
Hol van a kígyónak farka? Minek annak az a nagy karkötő?