Тут проскакивал вопрос о трее оперы. Написал скрипт, пару месяцев назад, для замены значка для оперы. Выполняет основные функции старого: сворачивает/разворачивает, "новая вкладка" и открыть ссылку из буфера обмена. Мне больше ничего не нужно, но так как скрипт на питоне, то всегда можно дописать нужные пункты.
1. Устанавливаем пакет "wmctrl":
sudo aptitude install wmctrl
2. Сохраняем код из сполера в файл.
#!/usr/bin/env python
import gtk
import os
import time
import threading
class Pidof(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
if (os.popen("pidof opera").read() == ''):
gtk.main_quit()
else:
print "no"
time.sleep(5)
class Menu(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
# Menu
self.menu = gtk.Menu()
self.open_opera = gtk.ImageMenuItem("Open Opera")
self.open_opera.connect('activate', self.open_win)
self.menu.append(self.open_opera)
self.url_opera = gtk.ImageMenuItem("Open URL")
self.url_opera.connect('activate', self.open_url)
self.menu.append(self.url_opera)
self.sep = gtk.SeparatorMenuItem()
self.menu.append(self.sep)
self.new_tab = gtk.ImageMenuItem("New Tab")
self.new_tab.connect('activate', self.new_tab_open)
self.menu.append(self.new_tab)
self.sep = gtk.SeparatorMenuItem()
self.menu.append(self.sep)
self.exit_opera = gtk.ImageMenuItem("Exit")
self.exit_opera.connect('activate', self.quit)
self.menu.append(self.exit_opera)
# Tray
self.tray = gtk.StatusIcon()
#self.tray.set_from_stock(gtk.STOCK_ABOUT)
self.tray.set_from_file('./icon.png')
self.tray.connect('activate',self.open_win)
self.tray.connect('popup-menu', self.popup, self.menu)
#Start opera
os.system ('opera -notrayicon & sleep 1')
self.show_window = True
time.sleep(15)
self.id = os.popen("wmctrl -l | grep Opera | awk '{print $1}'").read()
def popup(self, widget, button, time, data = None):
if button==3 and data:
data.show_all()
data.popup(None, None, None, 3, time)
def quit(self,widget):
os.system ('killall opera')
gtk.main_quit()
def open_win(self,widget):
print "open window"
if self.show_window == True:
os.system ('xdotool windowunmap ' + self.id)
else:
os.system ('xdotool windowmap ' + self.id)
self.show_window = not self.show_window
def open_url(self,widget):
if self.show_window == False:
os.system ('xdotool windowmap ' + self.id)
normal_url = os.popen('xclip -o').read()
if not normal_url:
os.system ('opera')
else:
os.system ('i=`xclip -o` ; opera --remote openURL"($i, new-page)"')
def new_tab_open(self,widget):
os.system ('opera')
print "new "
if __name__ == "__main__":
gtk.gdk.threads_init()
gtk.gdk.threads_enter()
menu = Menu()
menu.start()
gtk.gdk.threads_leave()
pidof = Pidof()
pidof.start()
gtk.main()
3. Закидываем в папку со скриптом картинку с именем "icon.png".
4. Все, переходим в папку со скриптом и запускаем:
cd ./opera_tray/
python script.py
Там есть небольшая недоработка: сначала должно появиться окно оперы, а только потом появиться значок в трее. Если иконка не появится, то стоит указать полный путь к картинке (строка 58).