Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Pracovní prostředí => Téma založeno: Martin Šácha 24 Prosince 2010, 22:10:07
-
Zdravím všechny,
mám 2 různé monitory, jeden obyčejný pro práci a druhý je televize (filmy). Samozřejmě mají různá rozlišení, monitor je 1024x768; tv 1920x1080px.
Grafika je bohužel prastará ATI, kterou už nepodporují uzavřené ovladače (menu Ovladače harwdaru je prázné).
Současný stav je takový, že po odpojení monitoru a a připojení televize je na tv obraz deformovaný; v původním rozlišení.
A ted k věci: jak nastavit xorg.conf tak, aby šlo mezi monitory přepínat stylem odpojím jeden, připojím druhý, bez restartu počítače?
Díky...
-
Možná pomůže disper -- viz Autodetekce externiho monitoru bez pouziti nVidie panelu (http://forum.ubuntu.cz/index.php/topic,37512.0.html)
a ještě bylo někde vlákno, které ale teď nemůžu najít, a nějaká dobrá duše napsala skript, který přepíná mezi primárním a sekundárním displejem (podle toho, jaké je aktuální rozlišení) - ten používám neustále. Jinak viz disper --help
#!/bin/bash
[ `xrandr -q | awk 'NR==2 {print $3}' | sed 's@x.*$@@'` == 1920 ] && disper -s || disper -S
Kdyžtak postni svůj xorg.conf, jaký tam máš nastavený metamodes.
-
#!/bin/bash
[ `xrandr -q | awk 'NR==2 {print $3}' | sed 's@x.*$@@'` == 1920 ] && disper -s || disper -S
Vidím svůj výtvor :) Ale disper je pro nvidie, ten nepomůže. Stačit by měl ale xrandr:
xrandr -qpři zapojení obou monitorů - ukáže jejich označení, podporovaná rozlišení a konfiguraci. Např.:
Screen 0: minimum 320 x 200, current 1024 x 600, maximum 4096 x 4096
VGA1 connected 1920x1200+1024+0 (normal left inverted right x axis y axis) 474mm x 297mm
1920x1200 59.9*+
1600x1200 75.0 60.0
1680x1050 60.0
1280x1024 75.0 60.0
1280x960 60.0
1152x864 75.0
1024x768 75.1 70.1 60.0
800x600 72.2 75.0 60.3 56.2
640x480 72.8 75.0 60.0
720x400 70.1
LVDS1 connected 1024x600+0+0 (normal left inverted right x axis y axis) 223mm x 125mm
1024x600 60.0*+
800x600 60.3 56.2
640x480 59.9
Pozn. tento příkaz jako vedlejší efekt nejspíše vyvolá připojení druhého monitoru v režimu rozšíření pracovní plochy.
Takže v tomto případě budu monitory přepínat pomocí:
xrandr --output VGA1 --auto --output LVDS1 --offa
xrandr --output VGA1 --off --output LVDS1 --auto
-
Teď koukám, že jsem se nechal zmátnout donnym, používáš tedy jeden konektor a měníš monitory natvrdo.. Nicméně xrandr by to měl snad vyřešit stejně..
Hmm nebude to možná tak triviální :)
Zkusím to zítra, ati momentálně nemám k dispozici.
-
Teď koukám, že jsem se nechal zmátnout donnym, používáš tedy jeden konektor a měníš monitory natvrdo.
Jejda, to se omlouvám, já právě přepínám mezi displejem ntb a ext.monitorem, tak jsem měl v hlavě takový scénář.
Tak ale i v tom případě bych to já osobně řešil tedy podobným skriptem, který by změnil rozlišení z většího na menší nebo naopak (a nějakou chytrou ikonku/spouštěč do panelu nebo někam, která bude vidět i u deformovanýho obrazu), příp. klávesovou zkratku.
Tedy skript nějaký takový (btw disper umí právě i částečně zastoupit xrandr, tak by to snad mělo fungovat takhle i na ati):
#!/bin/bash
[ `xrandr -q | awk 'NR==2 {print $3}' | sed 's@x.*$@@'` == 1920 ] && disper -r 1024x768 || disper -r 1920x1080
nebo případně zkusit prostě jenom disper -s, jestli si to rozlišení neupraví sám.
-
Takhle vypadá xorg.conf:
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
Section "Module"
Load "glx"
Load "dri2"
Load "dri"
Load "extmod"
Load "dbe"
Load "record"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Section "Monitor"
#DisplaySize 280 210 # mm
Identifier "Monitor0"
VendorName "GSM"
ModelName "52V"
HorizSync 30.0 - 54.0
VertRefresh 50.0 - 120.0
Option "DPMS"
# 1024x768 @ 75.00 Hz (GTF) hsync: 60.15 kHz; pclk: 81.80 MHz
# Modeline "1024x768_75.00" 81.80 1024 1080 1192 1360 768 769 772 802 -HSync +Vsync
# 1024x768 @ 50.00 Hz (GTF) hsync: 39.55 kHz; pclk: 51.89 MHz
# Modeline "1024x768_50.00" 51.89 1024 1064 1168 1312 768 769 772 791 -HSync +Vsync
# 1024x768 @ 65.00 Hz (GTF) hsync: 51.87 kHz; pclk: 69.71 MHz
Modeline "1024x768_65.00" 69.71 1024 1080 1184 1344 768 769 772 798 -HSync +Vsync
EndSection
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option "NoAccel" # [<bool>]
#Option "SWcursor" # [<bool>]
#Option "Dac6Bit" # [<bool>]
#Option "Dac8Bit" # [<bool>]
#Option "BusType" # [<str>]
#Option "CPPIOMode" # [<bool>]
#Option "CPusecTimeout" # <i>
#Option "AGPMode" # <i>
#Option "AGPFastWrite" # [<bool>]
#Option "AGPSize" # <i>
#Option "GARTSize" # <i>
#Option "RingSize" # <i>
#Option "BufferSize" # <i>
#Option "EnableDepthMoves" # [<bool>]
#Option "EnablePageFlip" # [<bool>]
#Option "NoBackBuffer" # [<bool>]
#Option "DMAForXv" # [<bool>]
#Option "FBTexPercent" # <i>
#Option "DepthBits" # <i>
#Option "PCIAPERSize" # <i>
#Option "AccelDFS" # [<bool>]
#Option "IgnoreEDID" # [<bool>]
#Option "DisplayPriority" # [<str>]
#Option "PanelSize" # [<str>]
#Option "ForceMinDotClock" # <freq>
#Option "ColorTiling" # [<bool>]
#Option "VideoKey" # <i>
#Option "RageTheatreCrystal" # <i>
#Option "RageTheatreTunerPort" # <i>
#Option "RageTheatreCompositePort" # <i>
#Option "RageTheatreSVideoPort" # <i>
#Option "TunerType" # <i>
#Option "RageTheatreMicrocPath" # <str>
#Option "RageTheatreMicrocType" # <str>
#Option "ScalerWidth" # <i>
#Option "RenderAccel" # [<bool>]
#Option "SubPixelOrder" # [<str>]
#Option "ShowCache" # [<bool>]
#Option "DynamicClocks" # [<bool>]
#Option "VGAAccess" # [<bool>]
#Option "ReverseDDC" # [<bool>]
#Option "LVDSProbePLL" # [<bool>]
#Option "AccelMethod" # <str>
#Option "DRI" # [<bool>]
#Option "ConnectorTable" # <str>
#Option "DefaultConnectorTable" # [<bool>]
#Option "DefaultTMDSPLL" # [<bool>]
#Option "TVDACLoadDetect" # [<bool>]
#Option "ForceTVOut" # [<bool>]
#Option "TVStandard" # <str>
#Option "IgnoreLidStatus" # [<bool>]
#Option "DefaultTVDACAdj" # [<bool>]
#Option "Int10" # [<bool>]
#Option "EXAVSync" # [<bool>]
#Option "ATOMTVOut" # [<bool>]
#Option "R4xxATOM" # [<bool>]
Identifier "Card0"
Driver "radeon"
VendorName "ATI Technologies Inc"
BoardName "RV280 [Radeon 9200 SE]"
BusID "PCI:1:0:0"
EndSection
#funguje max 800x600; fullscreen, syn. spatne
#Section "Screen"
# SubSection "Display"
# Depth 24
# Modes "1024x768"
# EndSubSection
#EndSection
#syntakticky dobre, 800x600; zmrseny obraz
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection
Koukám, že je v něm spousta kravin, asi jsem ho kdysi nějak vygeneroval, zkopíroval...nevím.
@GdH: Monitory měním natvrdo protože mám jenom jeden výstup :(
@donny: disper nemám, xrandr vyhodí pro malý monitor:
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1024 x 1024
VGA-0 connected 1024x768+0+0 (normal left inverted right x axis y axis) 260mm x 195mm
1024x768_65.00 65.0*
832x624 74.6
800x600 85.1 72.2 75.0 60.3 56.2
640x480 85.0 75.0 72.8 75.0 66.7 59.9
720x400 70.1
S-video disconnected (normal left inverted right x axis y axis)
a pro televizi:
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1360 x 1200
VGA-0 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x768 60.0*+ 59.9
1360x768 59.8
1152x864 60.0
1024x768_65.00 65.0
832x624 74.6
800x600 85.1 72.2 75.0 60.3 56.2
640x480 85.0 72.8 75.0 59.9
720x400 85.0
640x400 85.1
640x350 85.1
S-video disconnected (normal left inverted right x axis y axis)
-
Takže jsem nainstaloval disper odtud https://launchpad.net/~disper-dev/+archive/ppa
#!/bin/bash
[ `xrandr -q | awk 'NR==2 {print $3}' | sed 's@x.*$@@'` == 1920 ] && disper -r 1024x768 || disper -r 1920x1080
nebo případně zkusit prostě jenom disper -s, jestli si to rozlišení neupraví sám.
Script ale stejně nefunguje, jenom vypíše nápovědu k disper-u.
disper -s vyhodí toto:
global name 'disp' is not defined
-
No to je pěkný. Tak jinak. Můžeš vyzkoušet třeba tenhle upravený xorg.conf (nezapomeň v něm upravit HorizSync a VertRefresh):
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
Section "Module"
Load "glx"
Load "dri2"
Load "dri"
Load "extmod"
Load "dbe"
Load "record"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Section "Monitor"
Identifier "MonitorVGA"
HorizSync 30.0 - 54.0 # tady zkontroluj, jestli jsou hodnoty správné pro monitor
VertRefresh 50.0 - 120.0 # tady taky
Option "PreferredMode" "1024x768"
Option "DPMS"
EndSection
Section "Monitor"
Identifier "MonitorTV"
HorizSync 30.0 - 54.0 # tady zkontroluj, jestli jsou hodnoty správné pro televizi
VertRefresh 50.0 - 120.0 # tady taky
Option "PreferredMode" "1920x1080"
Option "DPMS"
EndSection
Section "Device"
Identifier "Device0"
Driver "radeon"
VendorName "ATI Technologies Inc"
BoardName "RV280 [Radeon 9200 SE]"
BusID "PCI:1:0:0"
Option "monitor-VGA" "MonitorVGA"
Option "monitor-TV" "MonitorTV"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "MonitorVGA"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1920x1080" "1024x768"
EndSubSection
EndSection
Jinak bych ještě možná vytvořil modelines podle Config Resolution | Adding undetected resolutions (https://wiki.ubuntu.com/X/Config/Resolution#Adding undetected resolutions)
Zřejmě by bylo vhodné vymazat xorg.conf/nebo ho někam přešoupnout, a nechat tam třeba jenom
Section "Device"
Identifier "Device0"
Driver "radeon"
VendorName "ATI Technologies Inc"
BoardName "RV280 [Radeon 9200 SE]"
BusID "PCI:1:0:0"
EndSection
a při zjišťování těch modelines vždy s čerstvým restartem s monitorem a pak s čerstvým restartem s televizí...
-
Rozsah televize sem si našel v manuálu, vypadá následovně:
Mode | Resolution | HF (kHz)| VF (Hz) | PCF (MHz) | H/V sync
CTV | 1920 x 1080RB | 66.587 | 59.934 | 138.500 | +/-
S čistým konfigurákem jsem vytvořil modeline televize (monitor mám z dřívějška):
$ cvt 1920 1080 60
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -HSync +Vsync
a aplikoval je do tvého upraveného konfiguráku:
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
Section "Module"
Load "glx"
Load "dri2"
Load "dri"
Load "extmod"
Load "dbe"
Load "record"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Section "Monitor"
Identifier "MonitorVGA"
HorizSync 30.0 - 54.0
VertRefresh 50.0 - 120.0
# 1024x768 @ 65.00 Hz (GTF) hsync: 51.87 kHz; pclk: 69.71 MHz
Modeline "1024x768_65.00" 69.71 1024 1080 1184 1344 768 769 772 798 -HSync +Vsync
Option "PreferredMode" "1024x768"
Option "DPMS"
EndSection
Section "Monitor"
Identifier "MonitorTV"
HorizSync 30.0 - 54.0
VertRefresh 50.0 - 120.0
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
Option "PreferredMode" "1920x1080"
Option "DPMS"
EndSection
Section "Device"
Identifier "Device0"
Driver "radeon"
VendorName "ATI Technologies Inc"
BoardName "RV280 [Radeon 9200 SE]"
BusID "PCI:1:0:0"
Option "monitor-VGA" "MonitorVGA"
Option "monitor-TV" "MonitorTV"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "MonitorVGA"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1920x1080" "1024x768"
EndSubSection
EndSection
Problém ale zůstává stejný, vždycky se natvrdo použije 1024x768.
-
No dobře, rozlišení vlastně zůstane (pochybuju, že existuje nějaká možnost, jak donutit systém automaticky detekovat "výměnu" monitorů, kdysi jsem dost googlil, jak odchytit připojení/odpojení monitoru na hdmi, ale bezvýsledně), ale mohl bys vytvořit ten skript, který ti při spuštění nastaví vždycky to druhé rozlišení, tedy např.
#!/bin/bash
displayName="VGA-0"
resolution1="1920x1080"
resolution2="1024x768"
[ `xrandr -q | awk 'NR==2 {print $3}' | sed 's@x.*$@@'` == ${resolution1%x*} ] \
&& xrandr --output default --mode ${resolution2} \
|| xrandr --output default --mode ${resolution1}
(snad jsem se s tím VGA-0 trefil) No a pak ho po přepojení displejů nějakým třeba spouštěčem na ploše/panelu spustit, a on rozlišení přehodí.
-
donny, ty v tom skriptu stále testuješ aktuální rozlišení, které je přeci stejné i po výměně monitoru, to je ten problém, který se řeší. Podle toho, co sem sachy vložil z výstupu xrandr -q, by to testovat šlo, ale musela by se vypreparovat jiná část. Já bych to ale viděl viděl jednodušeji:
xrandr --output default --off && xrandr --output default --auto
což by mělo odpovídat
xrandr --output VGA-0 --off && xrandr --output VGA-0 --auto
Zkrátka reset.
-
Ano testuju rozlišení, protože ve chvíli, než přehodí televizi 1920×1080 zpátky na monitor 1024×768, je potřeba nastavit zpátky menší rozlišení (tedy to druhé), vzhledem k tomu, že monitor to velké rozlišení vůbec nezobrazí. Tedy:
zapojen CRT, chci přepnout na TV: přepnout kabel na TV -> spustit skript (který nastaví větší /= to druhé/ rozlišení)
zapojen TV, chci přepnout na CRT -> spustit skript, který nastaví menší /= to druhé/ rozlišení -> přepnout kabel na CRT.
Aspoň tohle byla moje myšlenka.
-
Ano testuju rozlišení, protože ve chvíli, než přehodí televizi 1920×1080 zpátky na monitor 1024×768, je potřeba nastavit zpátky menší rozlišení (tedy to druhé), vzhledem k tomu, že monitor to velké rozlišení vůbec nezobrazí. Tedy:
zapojen CRT, chci přepnout na TV: přepnout kabel na TV -> spustit skript (který nastaví větší /= to druhé/ rozlišení)
zapojen TV, chci přepnout na CRT -> spustit skript, který nastaví menší /= to druhé/ rozlišení -> přepnout kabel na CRT.
Aspoň tohle byla moje myšlenka.
Ani ti tak neberu tu myšlenku, ale jsou tu dvě věci. Pokud zabere to, co navrhuji já, je testování zbytečné, protože dojde k autodetekci a výsledek je univerzálnější. Za druhé musím opakovat, že nemůžeš testovat aktuální rozlišení, protože toto rozlišení je i po přepojení monitorů stejné. Víš co ta testovací část skriptu přesně dělá? Koukni se na tyt výpisy z xrandr, co sem sachy dal a podívej se u obou na druhý řádek, třetí slovo ;)
-
Díky za poznámku, je pravda, že jsem na to koukal slepě, myslel jsem, že bere hodnotu z "current". Tady je upravený skript.
#!/bin/bash
resolution1="1920x1080"
resolution2="1024x768"
current=`xrandr -q|grep current`
[ `echo ${current#*current}|awk {'print $1'}` == ${resolution1%x*} ] \
&& xrandr --output default --mode ${resolution2} \
|| xrandr --output default --mode ${resolution1}
Ano, ale o to právě jde, že po přepojení na TV zůstane rozlišení stejné, tento skript to zjistí a nastaví to větší. Podívej se ještě na můj předchozí příspěvek.
Tvoje řešení je sice univerzálnější, ale co uděláš, když přepneš z TV (s nastaveným rozlišením 1080p) na monitor a ten ti zahlásí "OUT OF RANGE" nebo bůhví co?
-
dony, zamysli se nad tím ještě jednou ;) Mimochodem já píšu o tom, co mám vyzkoušené.
-
dony, zamysli se nad tím ještě jednou ;) Mimochodem já píšu o tom, co mám vyzkoušené.
čteš vůbec moje příspěvky celé? ;) hele, jestli mi fakt něco nedochází, tak mi to ale řekni, a né ať se nad tim zamyslim. Ten princip je prostě jasnej - přehodim monitor na tv, zůstane malý rozlišení. Spustim skript, ten (můj zjistí malé rozlišení a) nastaví velké rozlišení. Je to správně? To by měl udělat jak můj tak tvůj.
A co obráceně? Jak to bude s tvým skriptem, když se bude přepínat TV na monitor a zůstane tam velké rozlišení (jestli správně předpokládám, že se nezmenší)?
-
Po další várce testů...
#nestane se nic
xrandr --output default --off && xrandr --output default --auto
#problikne obraz, televize to ale stejně nebere (nepodporovany rezim)
xrandr --output VGA-0 --off && xrandr --output VGA-0 --auto
Donnyho script (ani jeden) neudělá nic.
Po nahrazení "default" za "VGA-0" mám takovýto výstup:
#!/bin/bash
resolution1="1920x1080"
resolution2="1024x768"
current=`xrandr -q|grep current`
[ `echo ${current#*current}|awk {'print $1'}` == ${resolution1%x*} ] \
&& xrandr --output VGA-0 --mode ${resolution2} \
|| xrandr --output VGA-0 --mode ${resolution1}
xrandr: cannot find mode 1920x1080
Možná je to tím, že monitor a televize mají různé frekvence, mon. 65 a tv 60.
Nešlo by to udělat třeba přes udev, při nalezení televize by nakopíroval xorg.conf.tv > xorg.conf a restartoval jenom Xka? Obráceně by nakopíroval xorg.conf.mon -> xorg.conf a opět restart Xek? Nebo udev funguje jenom při bootu?
-
čteš vůbec moje příspěvky celé? ;) hele, jestli mi fakt něco nedochází, tak mi to ale řekni, a né ať se nad tim zamyslim. Ten princip je prostě jasnej - přehodim monitor na tv, zůstane malý rozlišení. Spustim skript, ten (můj zjistí malé rozlišení a) nastaví velké rozlišení. Je to správně? To by měl udělat jak můj tak tvůj.
A co obráceně? Jak to bude s tvým skriptem, když se bude přepínat TV na monitor a zůstane tam velké rozlišení (jestli správně předpokládám, že se nezmenší)?
Promiň, psal jsem z mobilu, to bývám stručnější. Tvé příspěvky čtu pozorně, ale faktem je, že jedna tvá myšlenka mi unikla, neb jsem měl jinou představu o té detekci. To, nad čím jsi se měl zamyslet, je především tvrzení, že můj skript bude fungovat pouze v jednom případě. Jeho spuštění se provede po přepojení monitorů a jelikož jde o autodetekci, mělo by to fungovat stejně v obou případech (a mě to na otevřených ovladačích funguje). Předpokladem je použití klávesové zkratky, aby nebylo potřeba obrazu. Ideální by bylo řešení, že se skript spustí před výměnou, odpojí stávající monitor a čeká na stisk klávesy, který provedeš po výměně monitoru a tím ho připojíš. Jinak vždy dojde k tomu, že nový monitor dostává signál, který pro něj není, jde především o obnovovací frekvenci. To tvůj skript také neřeší.
A jelikož se mezitím, než jsem to dopsal, ozval sachy, budeme přemýšlet dál :)
-
no čistě teoreticky by to mohlo být nejjednodušší řešení - zprovoznit si kl.zkratku Ctrl-Alt-Backspace (setxkbmap -option terminate:ctrl_alt_bksp) a při výměně monitoru s ní prostě restartovat Xka a ty už si rozlišení nastaví snad správně...
-
Restart X by to řešit měl, ale je to děsně srabácký :)
-
GdH: jasně, klávesová zkratka, předtím jsme si akorát nerozuměli, mně šlo o to, že by se bez obrazu ten skript těžko spouštěl, ne že by opačně nefungoval. No, zkusím ještě opět googlit, jak by se dalo automaticky detekovat připojení monitoru (a je-li vůbec něco takového možné). I mně samotnému by to hodně pomohlo.
-
xrandr: cannot find mode 1920x1080
Zkus se podívat na ten link ze #7 - Config Resolution | Adding undetected resolutions (https://wiki.ubuntu.com/X/Config/Resolution#Adding undetected resolutions) - pokud jsi tamten modeline, co jsi řešil výš, nenechal v xorg.conf-u
-
xrandr: cannot find mode 1920x1080
Zkus se podívat na ten link ze #7 - Config Resolution | Adding undetected resolutions (https://wiki.ubuntu.com/X/Config/Resolution#Adding undetected resolutions) - pokud jsi tamten modeline, co jsi řešil výš, nenechal v xorg.conf-u
V xorg.conf jsou oba modeline, pro monitor i pro televizi.
no čistě teoreticky by to mohlo být nejjednodušší řešení - zprovoznit si kl.zkratku Ctrl-Alt-Backspace (setxkbmap -option terminate:ctrl_alt_bksp) a při výměně monitoru s ní prostě restartovat Xka a ty už si rozlišení nastaví snad správně...
$ setxkbmap -option terminate: ctrl_alt_bksp
Error loading new keyboard description
-
$ setxkbmap -option terminate: ctrl_alt_bksp
Error loading new keyboard description
Tak asi se sudo. Nemůžu to teď zkoušet...
-
$ setxkbmap -option terminate: ctrl_alt_bksp
Error loading new keyboard description
Tak asi se sudo. Nemůžu to teď zkoušet...
Stejný výstup.
Před chvílí jsem našel tohle, večer si budu hrát: https://wiki.ubuntu.com/X/Config/Resolution#Dynamically%20testing%20different%20resolutions
-
Takže, úplně jsem vyhodil xorg.conf a podařilo se mi dosáhnout na tv max. rozlišení 1360x768 při 60Hz (jedno z možných nastavení v manuálu k televizi). Obraz se ale klepe jako osika, takže to zjevně nezvládá grafika. Asi kvůli tomu se nám nedařilo to vysoké rozlišení zprovoznit, protože grafika tu frekvenci prostě nedává >:(
Takhle vypadá vygenerovaný xorg.conf pro televizi "Xorg -configure:1"
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
Section "Module"
Load "glx"
Load "dri2"
Load "dri"
Load "extmod"
Load "dbe"
Load "record"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option "NoAccel" # [<bool>]
#Option "SWcursor" # [<bool>]
#Option "Dac6Bit" # [<bool>]
#Option "Dac8Bit" # [<bool>]
#Option "BusType" # [<str>]
#Option "CPPIOMode" # [<bool>]
#Option "CPusecTimeout" # <i>
#Option "AGPMode" # <i>
#Option "AGPFastWrite" # [<bool>]
#Option "AGPSize" # <i>
#Option "GARTSize" # <i>
#Option "RingSize" # <i>
#Option "BufferSize" # <i>
#Option "EnableDepthMoves" # [<bool>]
#Option "EnablePageFlip" # [<bool>]
#Option "NoBackBuffer" # [<bool>]
#Option "DMAForXv" # [<bool>]
#Option "FBTexPercent" # <i>
#Option "DepthBits" # <i>
#Option "PCIAPERSize" # <i>
#Option "AccelDFS" # [<bool>]
#Option "IgnoreEDID" # [<bool>]
#Option "DisplayPriority" # [<str>]
#Option "PanelSize" # [<str>]
#Option "ForceMinDotClock" # <freq>
#Option "ColorTiling" # [<bool>]
#Option "VideoKey" # <i>
#Option "RageTheatreCrystal" # <i>
#Option "RageTheatreTunerPort" # <i>
#Option "RageTheatreCompositePort" # <i>
#Option "RageTheatreSVideoPort" # <i>
#Option "TunerType" # <i>
#Option "RageTheatreMicrocPath" # <str>
#Option "RageTheatreMicrocType" # <str>
#Option "ScalerWidth" # <i>
#Option "RenderAccel" # [<bool>]
#Option "SubPixelOrder" # [<str>]
#Option "ShowCache" # [<bool>]
#Option "DynamicClocks" # [<bool>]
#Option "VGAAccess" # [<bool>]
#Option "ReverseDDC" # [<bool>]
#Option "LVDSProbePLL" # [<bool>]
#Option "AccelMethod" # <str>
#Option "DRI" # [<bool>]
#Option "ConnectorTable" # <str>
#Option "DefaultConnectorTable" # [<bool>]
#Option "DefaultTMDSPLL" # [<bool>]
#Option "TVDACLoadDetect" # [<bool>]
#Option "ForceTVOut" # [<bool>]
#Option "TVStandard" # <str>
#Option "IgnoreLidStatus" # [<bool>]
#Option "DefaultTVDACAdj" # [<bool>]
#Option "Int10" # [<bool>]
#Option "EXAVSync" # [<bool>]
#Option "ATOMTVOut" # [<bool>]
#Option "R4xxATOM" # [<bool>]
Identifier "Card0"
Driver "radeon"
VendorName "ATI Technologies Inc"
BoardName "RV280 [Radeon 9200 SE]"
BusID "PCI:1:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection
Měnit v donnyho scriptu framerate pomocí přepínače "xrandr --rate 60" nemělo žádný účinek.
#!/bin/bash
resolution1="1920x1080"
resolution2="1024x768"
current=`xrandr -q|grep current`
[ `echo ${current#*current}|awk {'print $1'}` == ${resolution1%x*} ] \
&& xrandr --output VGA-0 --mode ${resolution2} --rate 65\
|| xrandr --output VGA-0 --mode ${resolution1} --rate 60