Fórum Ubuntu CZ/SK

Ostatní => Tipy a triky pro Linux => Téma založeno: MacHala 14 Března 2009, 00:02:26

Název: otevírání aplikace na určitou plochu
Přispěvatel: MacHala 14 Března 2009, 00:02:26
PROMO:
Chcete otevírat aplikace na určitou plochu a nevíte jak na to, aniž byst se museli upisovat ďáblu (respektive jíst jeho koláč)? Máme pro vás řešení! Využijte dnešní speciální nabídky. Platí jen 24 hodin denně, 7 dní v týdnu a 53-54 týdnů v roce. Proto neváhejte a změňte svůj život právě teď!


Takže k věci. Aby to fungovalo, budete potřebovat wmctrl (sudo aptitude install wmctrl), potom stačí následující skript ulozit do souboru  a nastavit spustitelný příznak. Nechcete-li nijak měnit funkčnost, zajímají vás pouze proměné KAM a PROGRAM (popis zdrojak). Po vyplnění můžete používat tento skript na spouštění dané aplikace na určenou plochu.

Kód: [Vybrat]
#!/bin/sh
KAM=2 # na kterou plochu to chci
PROGRAM=gnome-terminal # jmeno aplikace

###############################################################################

POCET_BEZICICH=`wmctrl -l| wc -l`
wmctrl -l | cut -d' ' -f1 > /tmp/wclist1.txt
$PROGRAM &
WIDTH=`xrandr --prop | sed -ne 's/^.*current\ \([0-9]*\).*/\1/p'` ## rozliseni, x-ova souradnice
COMPIZ=`ps x | grep -v grep | grep -c compiz`
while [ $POCET_BEZICICH -eq `wmctrl -l| wc -l` ]; do
sleep 1
done
wmctrl -l | cut -d' ' -f1 > /tmp/wclist2.txt
WIN_ID=`diff /tmp/wclist1.txt /tmp/wclist2.txt | cut -sd' ' -f2`
if [ $COMPIZ -eq 0 ] ; then
wmctrl -ir $WIN_ID -t `expr $KAM - 1`
else
VIEWPORT=`xprop -root | sed -ne '/_NET_DESKTOP_VIEWPORT(CARDINAL)/s/.*= \([0-9]*\),.*/\1/p'` ## na kolikatem pixlu jsme (plochy brany jako souvisly pruh)
wmctrl -ir $WIN_ID -e 0,`expr -$VIEWPORT + \( $KAM - 1 \) \* $WIDTH`,-1,-1,-1
fi
rm /tmp/wclist*
exit 0

Problémy:
-okno se na moment objeví na aktuální ploše, než se přesune na správnou plochu
-otevřete-li(zavřete) nějaké jiné okno, dřív než se otevře aplikace, spouštěná pomocí tohoto skriptu, může se chovat neočekávaně (budete-li spouštět aplikaci s předem známým unikátním titulkem okna, je triviální skript pozměnit a problému předejít)
-nebude to fungovat na apliakce otevírající více oken (např. gimp) (tohle by ale nemusel být problém změnit, za předpokladu, že se otevřou současně)
-hlašte!  ;)

Poznámky:
-vyzkoušeno v gnome/kde s compizem i bez
-volbu aplikace a plochy nenastavuju z parametru cmd, protoze predpokladam, ze z bashe se to bude spoustet minimalne, zajemci si zajiste doplni
-jestli myslite, ze to jde nejak jednoduseji/lepe tak se podelte jak na to
-při spouštění ihned po startu bych asi doporučil nastavení nějaké prodlevy (na začátek přidat řádek sleep (počet vteřin) )


Kdo bude prvním aktivním uživatelem? (autor nepoužívá, páč intelignti preferují chaos  :D )

EDIT: napraven problem se zjistenim horizontalniho rozliseni
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: t211 14 Března 2009, 00:41:55
Právě jsem ten skript vyzkoušel. Je to hezké.
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: PeLima 18 Března 2009, 15:26:39
Děkuju za nápad. Marně jsem se delší dobu snažil nějak k tomu ty aplikace přinutit.
Ale když chci aplikaci spouštět na 3 ploše, spustí se mi na druhé ploše, úplně vpravo nahoře. Není chyba v odečítání jedničky na řádku
wmctrl -ir $WIN_ID -e 0,`expr -$VIEWPORT + \( $KAM - 1 \) \* $WIDTH`,-1,-1,-1  ?
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: MacHala 18 Března 2009, 17:37:43
Děkuju za nápad. Marně jsem se delší dobu snažil nějak k tomu ty aplikace přinutit.
Ale když chci aplikaci spouštět na 3 ploše, spustí se mi na druhé ploše, úplně vpravo nahoře. Není chyba v odečítání jedničky na řádku
wmctrl -ir $WIN_ID -e 0,`expr -$VIEWPORT + \( $KAM - 1 \) \* $WIDTH`,-1,-1,-1  ?
ne, tam chyba neni (aspon nikde, kde jsem to zkousel, nebyla)...

jestli pouzivas compiz, tak spis myslim, ze to nacetlo spatne horizontalni rozliseni (resp. asi jsem pouzil spatnou cast vypisu na zjisteni)

muzes, prosim, napsat, jake mas rozliseni a co vypise prikaz
Kód: [Vybrat]
xprop -root | grep _NET_WORKAREA\(CARDINAL\)?
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: PeLima 18 Března 2009, 17:58:19
Monitor mám nastavený na 1680x1050
Kód: [Vybrat]
xprop -root | grep _NET_WORKAREA\(CARDINAL\)mi vrátí :
CUT_BUFFER0(STRING) = "_NET_WORKAREA(CARDINAL) = 24, 25, 1656, 1000"
_NET_WORKAREA(CARDINAL) = 24, 25, 1656, 1000

.... to je dobře, nebo špatně?
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: MacHala 18 Března 2009, 18:13:27
Monitor mám nastavený na 1680x1050
Kód: [Vybrat]
xprop -root | grep _NET_WORKAREA\(CARDINAL\)mi vrátí :
CUT_BUFFER0(STRING) = "_NET_WORKAREA(CARDINAL) = 24, 25, 1656, 1000"
_NET_WORKAREA(CARDINAL) = 24, 25, 1656, 1000

.... to je dobře, nebo špatně?
to zalezi na uhlu pohledu, kazdopadne jsem tam ale udelal chybu... v promene WIDTH by melo byt 1680 a u tebe je tam jen 1656...
zatim si zmen radek WIDTH=`xprop... na WIDTH=1680 , chvilku mi bude trvat, nez zjistim jak to udelat univerzalne spravne...

EDIT:
bylo to trivialni, aby to fungovalo univerzalne, staci ten radek zmenit na: WIDTH=`xrandr --prop | sed -ne 's/^.*current\ \([0-9]*\).*/\1/p'`
(aspon doufam)
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: Fuzzy 18 Března 2009, 20:42:58
v cem je vas postup lepsi od pouzivani devilspie? Podle me mnohem jednodussi konfigurace... Par prikazu a nastavim plochu, pozici, velikost atd. kazdeho spusteneho okna.
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: PeLima 19 Března 2009, 10:21:31
Super, to je ono co jsem hledal! To je o tom, že vím co asi chci udělat, ale nevím, jak se jmenuje příslušný program, ještě jednou díky.
A dkonce je na to tady i návod http://wiki.ubuntu.cz/Automatické%20rozmisťování%20oken (http://wiki.ubuntu.cz/Automatické%20rozmisťování%20oken). Sice v návodu píšou že je jeho : "...vlastnosti jsou užitečné především pro uživatele kteří nejsou zvyklí na používání virtuálních ploch a tento program jim pomůže udržet pořádek ve změti oken...", ale co je začátečnického na tom, že nechci 20 programů spouštět na první ploše a pak je denodenně ručně přemisťovat na plochy následující aby se s tím dalo pracovat, když už si to ty programy nedokážou zapamatovat automaticky.

Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: MacHala 19 Března 2009, 22:18:34
v cem je vas postup lepsi od pouzivani devilspie? Podle me mnohem jednodussi konfigurace... Par prikazu a nastavim plochu, pozici, velikost atd. kazdeho spusteneho okna.
a) tykej mi
b) vysvetli, co muze byt jednodusi nez napsat jmeno aplikace a cislo plochy (nemluve o tom, ze na rozumnych distrech neni potreba vubec nic instalovat)
c) devil's pie je gnome only, tohle by melo fungovat vsude, kde je podporovano EWMH
d) tem, kteri o tom nevi, jsem chtel ukazat, ze manipulovat s okny jde i jinak, nez jsou zvykli a trochu je inspirovat (koneckoncu, devils pie neni zadny zazrak - a to nemluvim o prenositelnosti - nastavi jen vychozi bod - naproti tomu wmctrl je nastroj, kterym muzes delat s okny psi kusy naprosto kdykoliv)
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: qUAKER 20 Března 2009, 14:41:49
jen bych chtěl říct, že pro uživatele prostředí Enlightenment DR17 není nutné toto použít a tato funkcionalita už je zabudována.

Stačí kliknout pravým na titlebar, dát Vlastnosti okna, zaškrtnout způsob jakým si to pamatovat(podle třídy atd) a pak zaškrtnout vlastnosti(pozici, virtuální plochu, styl okraje..)
Název: Re: otevírání aplikace na určitou plochu
Přispěvatel: PeLima 20 Března 2009, 15:50:42
No, předpokládal bych, že rozumné distro si bude umět nějakým způsobem uložit velikost, pozici okna a atributy "vždy na viditelné ploše" a "vždy navrchu". Třeba mě maximálně opruzuje, když si musím po každém restartu všechny spuštěné věci znovu přeuspořádat podle sebe.
Že je devil's pie Gnome only mi momentálně nevadí taky jsem Gnome only. Tvoje řešení je sice méně komplexní, ale zase pro okamžité použití mnohem rychlejší a jednodušší, dík za ně a za ukázku práce s wmctrl. Asi mi bude chilku trvat, než přečtu a strávím man wmctrl.

....
b) vysvetli, co muze byt jednodusi nez napsat jmeno aplikace a cislo plochy (nemluve o tom, ze na rozumnych distrech neni potreba vubec nic instalovat)
c) devil's pie je gnome only, tohle by melo fungovat vsude, kde je podporovano EWMH
d) tem, kteri o tom nevi, jsem chtel ukazat, ze manipulovat s okny jde i jinak, nez jsou zvykli a trochu je inspirovat (koneckoncu, devils pie neni zadny zazrak - a to nemluvim o prenositelnosti - nastavi jen vychozi bod - naproti tomu wmctrl je nastroj, kterym muzes delat s okny psi kusy naprosto kdykoliv)