Διαχειριση των παραθυρων των εφαρμογων μεσω script (wmctrl)

...το μέρος για να ξεκινήσετε!

Συντονιστής: adem1

Κανόνες Δ. Συζήτησης
Παρακαλώ να επιλέξετε, με προσοχή, την άδεια που θέλετε να έχουν οι οδηγοί που συγγράφετε.
Πληροφορίες για τις άδειες μπορείτε να βρείτε εδώ.
Άμα επιθυμείτε κάποια άλλη άδεια επικοινωνήστε με κάποιο Διαχειριστή είτε Συντονιστή.

Σημαντικό είναι να χρησιμοποιήσετε την υπηρεσία http://imagebin.ubuntu-gr.org για τις εικόνες.

Διαχειριση των παραθυρων των εφαρμογων μεσω script (wmctrl)

Δημοσίευσηαπό xqtr » 11 Αύγ 2009, 01:45

Περιγραφη
Σκοπος αυτου του οδηγου ειναι να μπορεσουμε να διαχειριστουμε τα παραθυρα των εφαρμογων μας μεσω απλων scripts και κατ´ επεκταση μεσω συντομευσεων στον πληκτρολογιο.

Εγκατασταση
Αρχικα θα χρειαστει να εγκαταστησουμε το απαραιτητο προγραμμα για τον ελεγχο των εφαρμογων. Λεγεται wmctrl, γραφετε απλα:
Κώδικας: Επιλογή όλων
sudo apt-get install wmctrl

στο terminal για να το εγκαταστησετε.

Απο εδω και περα, με το προγραμμα αυτο μπορουμε να μεγιστοποιησουμε/ελαχιστοποιησουμε καποιο παραθυρο οποιασδηποτε εφαρμογης, να της αλλαξουμε το μεγεθος, να την φερουμε στο προσκηνιο ή ακομα και να την μεταφερουμε σε καποια αλλη εικονικη επιφανεια εργασιας. Το μονο που χρειαζετε ειναι να γνωριζουμε το ονομα της εφαρμογης που θελουμε να διαχειριστουμε. Για να το δουμε αυτο, γραφουμε:
Κώδικας: Επιλογή όλων
wmctrl -l

στο terminal και θα μας δωθει μια πληρη λιστα με τα στοιχεια των εφαρμογων που τρεχουν αυτη τη στιγμη στο συστημα μας. Για παραδειγμα:
Κώδικας: Επιλογή όλων
:~$ wmctrl -l
0x01200003 -1 laptop Top Expanded Edge Panel
0x01200075 -1 laptop Bottom Expanded Edge Panel
0x0140001c -1 laptop x-nautilus-desktop
0x0141985f  0 laptop Torrents - File Browser
0x03200043  0 laptop Ubuntu-gr Forum • Δημιουργία νέου θέματος - Shiretoko
0x03e00003  0 laptop user@laptop: ~


Παραδειγματα
Στο παραδειγμα βλεπουμε οτι ο χρηστης τρεχει την εφαρμογη Shiretoko (εκδοση του Firefox) και την οποια θα χρησιμοποιησουμε για τα παραδειγματα μας:

Μεγιστοποιηση Εφαρμογης
Κώδικας: Επιλογή όλων
wmctrl -r "shiretoko" -b add,maximized_vert,maximized_horz

Ελαχιστοποιηση Εφαρμογης
Κώδικας: Επιλογή όλων
wmctrl -r "shiretoko" -b remove,maximized_vert,maximized_horz

Μετακινηση Εφαρμογης σε Συγκεκριμενη Θεση στην Επιφανεια Εργασιας
Κώδικας: Επιλογή όλων
wmctrl -r "shiretoko" -e '0,6,0,1040,708'

Αλλαγη Εικονικης Επιφανειας Εργασιας (χωρις το Compiz ενεργοποιημενο)
Κώδικας: Επιλογή όλων
wmctrl -s 2

Αλλαγη Ονοματος της Εφαρμογης
Κώδικας: Επιλογή όλων
wmctrl -r "shiretoko" -T "Ubuntu Internet Explorer"

Αν στα παραπανω παραδειγματα αντι για "shiretoko" γραψετε :SELECT:, δηλαδη:
Κώδικας: Επιλογή όλων
wmctrl -r :SELECT: -T "Ubuntu Internet Explorer"

τοτε θα πρεπει να διαλεξετε με το ποντικι την εφαρμογη που θελετε να εφαρμοσετε την εντολη, ενω αν βαλετε :ACTIVE:
Κώδικας: Επιλογή όλων
wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz

η εντολη θα εφαρμοστει στην εφαρμογη που ειναι ενεργη.

Εφαρμογες

Quake Terminal
Θα φτιαξουμε ενα script το οποιο θα ενεργοποιουμε με το πατημα ενος συνδυασμου πληκτρων και το οποιο θα μας εμφανιζει/εξαφανιζει το terminal. Θα προσομειωσουμε δηλαδη ενα terminal στο στυλ παιχνιδιων τυπου Doom, Quake κτλ.
Καταρχας ανοιγουμε το terminal και πηγαινουμε στο μενου "Edit" -> "Profile Preferences" -> "Title and command" και στο πεδιο "Initial Title" δεινουμε ενα δικο μας τιτλο πχ "Quake Terminal" και στο scrollbox απο κατω επιλεγουμε "Append Initial Title" η "Keep Initial Title". Και το κλεινουμε.
Ανοιγουμε τον GEdit και κανουμε paste το παρακατω script:
Κώδικας: Επιλογή όλων
#!/bin/sh

# Επαναφορα στο προσκηνιο
if [ -f /tmp/.quake.shaded ]; then #Αν υπαρχει το αρχειο
    wmctrl -r 'Quake' -e '0,3,0,800,600'  #Μετακινηση του παραθυρου επανω αριστερα
    wmctrl -r 'Quake' -b remove,below   #Εμφανιση
    wmctrl -r 'Quake' -b remove,shaded  #Ανοιγμα
    rm /tmp/.quake.shaded
# Αποστολη στο παρασκηνιο
else #Αν δεν υπαρχει το αρχειο
    wmctrl -r 'Quake' -b add,shaded
    wmctrl -r 'Quake' -b add,below
    touch /tmp/.quake.shaded
fi

Το σωζουμε και το κανουμε εκτελεσιμο. Τελος το συνδεουμε να ανοιγει και με ενα συνδυασμο πληκτρων πχ "Alt + ~" απο το μενου "System" -> "Preferences" -> "Keyboard Shortcuts". Τωρα το terminal με ενα πατημα των πληκτρων θα εμφανιζεται και με αλλο ενα θα κρυβεται. Εννοειται οτι για να λειτουργησει το script θα πρεπει να εχετε τρεξει πρωτα το terminal.

Aποκρυψη ολων των εφαρμογων εκτος του Conky
Στο ubuntu υπαρχει ενα κουμπακι στo panel με το οποιο οταν το πατατε, ελαχιστοποιουντε ολες οι εφαρμογες ωστε να εμφανιστει το desktop. Δυστυχως ομως αν τρεχετε το Conky τοτε εξαφανιζετε και αυτο, χωρις να μπορειτε να το επαναφερετε. Πρεπει αναγκαστικα να το κλεισετε (πχ μεσω kill) και να το τρεξετε παλι. Χρησιμοποιηστε το παρακατω script ωστε να ελαχιστοποιουνται ολες οι εφαρμογες, εκτος του Conky.

Κώδικας: Επιλογή όλων
#!/bin/sh
wmctrl -k on
wmctrl -a conky


Διαφορετικο background σε καθε εικονικο desktop
Κανονικα δεν γινετε... ;) αλλα με το παρακατω τρικ, στην ουσια το προσομοιωνουμε. Φτιαχνετε δυο scripts. To ενα για να "κυλατε" τα desktops δεξια και το αλλο για αριστερα. Θα πρεπει να τα εκτελειτε με συντομευση πληκτρων πχ Ctrl + Alt + Δεξι Βελακι ή Αριστερο Βελακι (cursor).

Script για κυλιση αριστερα:
Spoiler: show
Κώδικας: Επιλογή όλων
#
#!/bin/bash
#
#left_workspace.sh
#

#
#get number of workspaces
#
ws=$(wmctrl -d | wc -l)
#

#
#current workspace index
#
cws=$(wmctrl -d | awk '/\*/ {print $1}')
#

#
#work space on left
#
lws=$(($cws-1))
#

#
#wrap if required
#
if [ $lws = -1 ]; then
#
lws=$(($ws-1))
#
fi
#
echo $lws
#

#
#change to next workspace
#
wmctrl -s $lws
#

#
#set wallpaper depending on workspace number
#
case $lws in
#
("0") gconftool -t string -s /desktop/gnome/background/picture_filename /home/jp/Pictures/100.jpg;
#
;;
#
("1") gconftool -t string -s /desktop/gnome/background/picture_filename /home/jp/Pictures/200.jpg;
#
;;
#
("2") gconftool -t string -s /desktop/gnome/background/picture_filename /home/jp/Pictures/300.jpg;
#
;;
#
("3") gconftool -t string -s /desktop/gnome/background/picture_filename /home/jp/Pictures/400.jpg;
#
;;
#
#follow the above format to set as many desktops as you have specified in the workspace applet
#
esac


Script για κυλιση δεξια:
Spoiler: show
Κώδικας: Επιλογή όλων
#
#!/bin/bash
#

#
#right_workspace.sh
#

#
#get number of workspaces
#
ws=$(wmctrl -d | wc -l)
#

#
#current workspace index
#
cws=$(wmctrl -d | awk '/\*/ {print $1}')
#

#
#work space on right
#
rws=$(($cws+1))
#

#
#wrap if required
#
if [ $rws = $ws ]; then
#
rws=0
#
fi
#

#
#change to next workspace
#
wmctrl -s $rws
#

#
#set wallpaper depending on workspace number
#
case $rws in
#
("0") gconftool -t string -s /desktop/gnome/background/picture_filename /home/jp/Pictures/100.jpg;
#
;;
#
("1") gconftool -t string -s /desktop/gnome/background/picture_filename /home/jp/Pictures/200.jpg;
#
;;
#
("2") gconftool -t string -s /desktop/gnome/background/picture_filename /home/jp/Pictures/300.jpg;
#
;;
#
("3") gconftool -t string -s /desktop/gnome/background/picture_filename /home/jp/Pictures/400.jpg;
#
;;
#
#follow the above format to set as many desktops as you have specified in the workspace applet
#
esac

Στις γραμμες οπου αναφερεται η εντολη gconftool θα πρεπει στο τελος να δωσετε την διαδρομη της εικονας που εσεις θελετε.

Εναρξη Εφαρμογης ή Ενεργοποιηση
Πολλες φορες τυχαινει να ξεχναμε οτι εχουμε ανοιξει μια εφαρμογη πχ το terminal ή τον firefox και να την ανοιγουμε πολλες φορες. Με την παρακατω εντολη ομως ειναι δυνατον να ψαχνουμε πρωτα αν ηδη τρεχει η εφαρμογη και αν οχι τοτε να εκτελεστει. Μπορειτε να την βαλετε σε καποιο script η κατευθειαν σαν συντομευση σε καποιο πληκτρο.
Κώδικας: Επιλογή όλων
wmctrl -a Firefox || firefox


Ο οδηγος αυτος βασιζεται στα παρακατω links:
http://sourceforge.net/apps/trac/easyst ... sAndTricks
http://snipplr.com/view/11349/unique-ba ... -on-linux/
http://www.linuxjournal.com/article/10066
http://www.oreillynet.com/sysadmin/blog ... windo.html
http://www.linuxjournal.com/article/9973
Άβαταρ μέλους
xqtr
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 506
Εγγραφή: 05 Φεβ 2009, 19:00
Εκτύπωση

Re: Διαχειριση των παραθυρων των εφαρμογων μεσω script (wmctrl)

Δημοσίευσηαπό linuxman » 11 Αύγ 2009, 02:57

Μπράβο , αρκετά καλός τρόπος διαχείρισης παραθύρων .
Οδηγίες προς Νεοεισερχόμενους
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Linux Mint 17.1 Rebecca 3.13.0-37-generic 64bit (el_GR.UTF-8, X-Cinnamon cinnamon)
3 Intel Core i5-2310M CPU @ 2.10GHz ‖ RAM 3866 MiB ‖ Dell Inc. 0D7C51 - Dell Inc. Dell System Vostro 3750
4 Intel 2nd Generation Core Processor Family Integrated Graphics [8086:0116] {i915}
5 wlan0: Intel Centrino Wireless-N 1030 [Rainbow Peak] [8086:008a] (rev 34) ⋮ eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 06)
http://www.greeklug.gr
Άβαταρ μέλους
linuxman
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10378
Εγγραφή: 10 Μάιος 2008, 20:41
Τοποθεσία: Thessaloniki / Macedonia / Greece
Εκτύπωση


  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Οδηγοί - How to - Tutorials