Δημοσιεύτηκε: 12 Απρ 2015, 22:13



Κατά καιρούς έχω χρησιμοποιήσει διάφορα εντυπωσιακά conky που όμως οι πληροφορίες τους κατέληγαν να κρύβονται πίσω από τις ανοιχτές εφαρμογές. Εδώ και αρκετό καιρό έχω καταλήξει σε ένα dzen based conky γραμμή, με όλες τις πληροφορίες που με ενδιαφέρουν, το οποίο -ρυθμίζοντας το margin του openbox που χρησιμοποιώ σαν window manager- είναι πάντα ορατό.
Εκτός από αυτό το πλεονέκτημα έχω ρυθμίσει να δείχνει το keyboard layout, κάτι που με βολεύει μιας και έτσι δε χρειάζεται να χρησιμοποιώ το panel, ώστε να εκμεταλλεύομαι όλη την οθόνη του laptop μου που είναι μόνο 13".
Σε αυτό με βοηθάει το custom menu στο δεξί κλικ του openbox που έχω για να μου δίνει άμεση πρόσβαση στις εφαρμογές που χρησιμοποιώ πιο συχνά, το κεντρικό μενού του συστήματος με όλα τα προγράμματα, συν ένα μενού με το desktop και όλες τις ανοιχτές εφαρμογές.
Το συγκεκριμένο conky βασίζεται στο dzen2:
έγραψε:Dzen is a general purpose messaging, notification and menuing program for X11.
It was designed to be fast, tiny and scriptable in any language
Για να το χρησιμοποιήσει κάποιος χρειάζεται τις παρακάτω εφαρμογές, οι οποίες βρίσκονται όλες στα repos του ubuntu:
conky, dzen2, curl (για την ενημέρωση του καιρού) και aptitude (για να ενημερώνει πόσες αναβαθμίσεις είναι διαθέσιμες).
Τα απαρραίτητα αρχεία είναι: τα εικονίδια (το χρώμα των οποίων μπορεί να είναι όποιο εμείς θέλουμε και ρυθμίζεται στο conkyrc) και βρίσκονται εδώ, το βασικό conkyrc και τα παρακάτω scripts, τα οποία πρέπει να τα κάνουμε εκτελέσιμα: το script εκκίνησης, το script του καιρού και αυτό του gmail. Η τελευταία ένδειξη είναι για μουσική και στο δικό μου setup παίρνει πληροφορίες από το exaile που χρησιμοποιώ σαν music player. Μπορεί κάποιος να το ρυθμίσει με τον αντίστοιχο κώδικα για τον δικό του player ή να αφαιρέσει το κομμάτι του κώδικα εντελώς.
Τα διάφορα συστατικά μπορούν να τοποθετηθούν όπου εμείς θέλουμε, αρκεί να ενημερώσουμε κατάλληλα, με το σωστό path, τα αρχεία που τα καλούν. Οι οδηγίες θα είναι με τις δικές μου επιλογές και θα δουλέψουν στο όποιο σύστημα μόνο με μια αλλαγή, αν αντικατασταθεί σε όλα τα αρχεία το username μου με το όνομα του home του χρήστη.
Μέσα στο bin φάκελλο που έχω στο home μου, βρίσκεται το αρχείο εκκίνησης dzenbar.sh. Μέσα στο .conky βρίσκονται ο φάκελλος dzicons με τα εικονίδια και το αρχείο conkyrc_dzen_mine (σε αυτό το αρχείο πρέπει να αντικατασταθεί το όνομα χρήστη με replace all). Στο φάκελλο .scripts βρίσκονται τα αρχεία gmail.py (εδώ πρέπει να τοποθετηθεί το username του gmail και το password, μειονέκτημα ότι αυτά βρίσκονται σε απλό αρχείο κειμένου και είναι προσβάσιμα σε όποιον άλλον μπορεί να μπαίνει στο λογαριασμό μας) και weather.sh (όπου θα αντικατασταθεί ο κωδικός πόλης μιας και τώρα είναι ρυθμισμένο να δείχνει καιρό για την Αθήνα).
Μπορούμε να ρυθμίσουμε τη θέση, το ύψος, τη γραμματοσειρά, τα χρώματα σε background, γραμματοσειράς, εικονιδιών και ενδείξεων, τα τευλευταία και ανά ένα αν θέλουμε, ώστε να ξεχωρίζει ότι μας ενδιαφέρει πιο πολύ.
Αρχεία:
dzenbar.sh: μέσα στο /home/username/bin, το κάνουμε εκτελέσιμο και είναι αυτό που προσθέτουμε στο startup για να ξεκινάει το conky με το login. Το βάζουμε με όλη τη διαδρομή /home/κλπ/bin/dzenbar.sh Η γραμματοσειρά που χρησιμοποιώ είναι η Pragmata την οποία ή την κατεβάζουμε ή την αντικαθιστούμε με κάποια που έχουμε και μας αρέσει.
- Κώδικας: Επιλογή όλων
#! /bin/bash
RC="$HOME/.conky/conkyrc_dzen_mine"
FG="#bfbfbf"
BG="#292229"
ALIGN="center"
WIDTH="1366"
HEIGHT="12"
FONT="Pragmata:size=8"
XPOS="0"
YPOS="756"
conky -c $RC | dzen2 -e 'button2=;' -fg $FG -bg $BG -ta $ALIGN -h $HEIGHT -x $XPOS -y $YPOS -fn "$FONT" &
exit 0
conkyrc_dzen_mine: βρίσκεται μέσα στο φάκελλο .conky και κάνουμε αντικατάσταση τον κωδικό πόλης και το όνομα του home μας όπου υπάρχει διαδρομή αρχείων
- Κώδικας: Επιλογή όλων
########################################################################
# dzen conkyrc #
########################################################################
# Settings #
########################################################################
background yes
out_to_x no
out_to_console yes
update_interval 1.0
total_run_times 0
top_name_width 10
use_spacer none
double_buffer yes
cpu_avg_samples 2
text_buffer_size 2048
override_utf8_locale yes
if_up_strictness address
########################################################################
# Output #
########################################################################
TEXT
${if_up wlan0}^fg(\#6F916F)^i(/home/fog/.conky/dzicons/dish.xbm) ^fg()${execi 1800 /home/fog/.scripts/weather.sh "EUR|GR|GR007|Athens"} \
^fg(\#B9AD87)^i(/home/fog/.conky/dzicons/info9.xbm) ^fg()${uptime_short} ^fg(\#70A7A9)^i(/home/fog/.conky/dzicons/info6.xbm) ^fg()${nodename} \
^fg(\#9A98A7)^i(/home/fog/.conky/dzicons/info2.xbm) ^fg()${exec uname -r | cut -c1-21} \
^fg(\#719471)^i(/home/fog/.conky/dzicons/temp6.xbm) ^fg(\#A05458)${acpitemp}°C \
^fg(\#6F916F)^i(/home/fog/.conky/dzicons/info10.xbm) ^fg()${execi 1000 cat /proc/cpuinfo | grep 'model name' | sed -e 's/model name.*: //'| uniq | cut -c 19-40} \
^fg(\#B9AD87)^i(/home/fog/.conky/dzicons/cpu.xbm) ^fg()${cpu cpu0}% ${cpu cpu1}% ${cpu cpu2}% ${cpu cpu3}% \
^fg(\#70A7A9)^i(/home/fog/.conky/dzicons/mem.xbm) ^fg(\#A05458)${mem}/^fg()${memmax} \
^fg()${if_existing /sys/class/power_supply/BAT0}${if_match ${battery_percent BAT0} >=26}^fg()^i(/home/fog/.conky/dzicons/bat_full_01.xbm)${else}\
^fg(\#CC0000)^i(/home/fog/.conky/dzicons/bat_low_01.xbm)^fg()${endif} ^fg()${battery_percent BAT0}% \
${else}${endif}${if_existing /sys/class/power_supply/BAT1}${if_match ${battery_percent BAT1} >=26}^fg(\#7cfc00)^i(/home/fog/.conky/dzicons/bat_full_01.xbm)${else}\
^fg(\#CC0000)^i(/home/fog/.conky/dzicons/bat_low_01.xbm)^fg()${endif} ^fg()${battery_percent BAT1}%${else}${endif} \
^fg(\#9A98A7)^i(/home/fog/.conky/dzicons/home.xbm) ^fg()${fs_used_perc /}% \
^fg(\#719471)^i(/home/fog/.conky/dzicons/mail.xbm) ^fg(\#A05458)${execpi 120 python /home/fog/.scripts/gmail.py}^fg()${endif} \
${if_gw}^fg()${if_up eth0}^i(/home/fog/.conky/dzicons/net_wired.xbm) \
^fg(\#6F916F)^i(/home/fog/.conky/dzicons/net_up_02.xbm) ^fg()${upspeedf eth0} \
^fg(\#B9AD87)^i(/home/fog/.conky/dzicons/net_down_02.xbm) ^fg()${downspeedf eth0} \
^fg()${endif}${if_up wlan0}^fg(\#9A98A7)^i(/home/fog/.conky/dzicons/wifi_02.xbm) ^fg()${wireless_essid wlan0} ${wireless_link_qual wlan0}% \
^fg(\#6F916F)^i(/home/fog/.conky/dzicons/net_up_02.xbm) ^fg()${upspeedf wlan0} \
^fg(\#B9AD87)^i(/home/fog/.conky/dzicons/net_down_02.xbm) ^fg()${downspeedf wlan0} \
^fg()${endif}${endif} \
^fg(\#6F916F)^i(/home/fog/.conky/dzicons/pacman.xbm) ^fg()${execi 3000 aptitude search "~U" | wc -l} \
^fg(\#719471)^i(/home/fog/.conky/dzicons/alien.xbm) ^fg(\#A05458)${if_match ${execi 2 xset -q | grep -A 0 'LED' | cut -c63} == 0}us^fg()${else}gr^fg()${endif} \
^fg(\#70A7A9)^i(/home/fog/.conky/dzicons/cal.xbm) ^fg()${time %d/%m}^fg(\#9A98A7) ^i(/home/fog/.conky/dzicons/clock.xbm) ^fg()${time %H:%M} \
${if_running exaile}^fg(\#70A7A9)^i(/home/fog/.conky/dzicons/phones.xbm) ^fg()${execi 10 exaile --get-title} - ${execi 10 exaile --get-artist} ${else}^fg(\#6F916F)^i(/home/fog/.conky/dzicons/note.xbm) ^fg()Music is your only friend^fg()${endif}
weather.sh: βρίσκεται μέσα στο φάκελλο .scripts, πρεπει να είναι εκτελέσιμο και να έχει το σωστό κωδικό για την πόλη μας
- Κώδικας: Επιλογή όλων
#!/bin/sh
#AccuWeather (r) RSS weather tool for conky
#
#USAGE: weather.sh <locationcode>
#
METRIC=1 #Should be 0 or 1; 0 for F, 1 for C
if [ -z $1 ]; then
echo
echo "USAGE: weather.sh "EUR|GR|GR007|Athens""
echo
exit 0;
fi
curl -s http://rss.accuweather.com/rss/liveweather_rss.asp\?metric\=${METRIC}\&locCode\=$1 \
| sed -n '/Currently:/ s/.*: \(.*\): \([-0-9]*\)\([CF]\).*/\1\ \2°\3/p'
gmail.py: βρίσκεται μέσα στο φάκελλο .scripts και πρέπει να βάλουμε το username και το password του gmail για να δουλέψει
- Κώδικας: Επιλογή όλων
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys, imaplib
port = 993
server = 'imap.gmail.com'
username = 'blabla'
passwd = 'blabla1234'
imap_server = imaplib.IMAP4_SSL(server, port)
try:
imap_server.login(username, passwd)
except:
print('?? new')
sys.exit( 1 )
typ, data = imap_server.select ('Inbox', True)
if typ == 'OK':
total = int(data[0])
typ, data = imap_server.search (None, 'SEEN')
if typ == 'OK':
seen = len(data[0].split())
print('{}'.format(total - seen))
if typ != 'OK':
print('?? new')
imap_server.logout()