LINUX.ORG.RU
ФорумTalks

написал gnome-апплет для переключения cpufreq policy


0

0

Если кому надо, улучшайте :) У меня работает - мне достаточно этого. Код некрасивый - просьба не обсуждать. Способ переключения тоже не очень - нужен cpufrequtils

Скриншот: http://home.lx-host.net/tmp/Screenshot.png
Кстати, хост хороший в плане вкусностей и цены...

#!/usr/bin/python
import pygtk
pygtk.require('2.0')
import gtk
import gnomeapplet
import os

def get_active_text(combobox):
	model = combobox.get_model()
	active = combobox.get_active()
	if active < 0:
		return None
	return model[active][0]

def item_changed(box):
	policy =  get_active_text(box)
	if policy == 'save':
		cmd = 'cp /etc/conf.d/cpufrequtils.ondemand /etc/conf.d/cpufrequtils'
		os.popen(cmd, 'w')
		os.popen('sudo /etc/init.d/cpufrequtils restart')		
	elif policy == 'fast':
		cmd = 'cp /etc/conf.d/cpufrequtils.performance /etc/conf.d/cpufrequtils'
		os.popen(cmd, 'w')
		os.popen('sudo /etc/init.d/cpufrequtils restart')

def sample_factory(applet, iid):
	b = gtk.HBox(True, 0)	
	
	label = gtk.Label('battery:')
	b.pack_start(label)
	
	applet.set_border_width = 20
		
	box = gtk.combo_box_new_text()
	box.append_text('save')
	box.append_text('fast')
	
	#find out the policy set
	policy = os.popen('cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor').read().strip()
	if policy == 'performance':
		box.set_active(1)
	elif policy == 'ondemand':
		box.set_active(0)
		
	box.connect('changed', item_changed)	
	b.pack_start(box)
	applet.add(b)
	applet.show_all()
	return gtk.TRUE
	
gnomeapplet.bonobo_factory("OAFIID:GNOME_PysampleApplet_Factory",
									gnomeapplet.Applet.__gtype__,
									"hello", "0", sample_factory)
			
if __name__ == '__main__':
	win = gtk.Window()
	b = gtk.HBox(True, 0)	
	
	label = gtk.Label('battery:')
	b.pack_start(label)
	
	win.set_border_width = 20
	win.set_position(gtk.WIN_POS_CENTER_ALWAYS)	
	
	box = gtk.combo_box_new_text()
	box.append_text('save')
	box.append_text('fast')
	
	#find out the policy set
	policy = os.popen('cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor').read().strip()
	if policy == 'performance':
		box.set_active(1)
	elif policy == 'ondemand':
		box.set_active(0)
		
	box.connect('changed', item_changed)	
	b.pack_start(box)
	win.add(b)
	win.show_all()
	gtk.main()
	

★★★★

# cat /usr/lib/bonobo/servers/sample.server

        <oaf_info>
        <oaf_server iid="OAFIID:GNOME_PysampleApplet_Factory"
                    type="exe" location="/home/anton/python/pygtk/03-gnomeapplet.py">

                <oaf_attribute name="repo_ids" type="stringv">
                        <item value="IDL:Bonobo/GenericFactory:1.0"/>
                        <item value="IDL:Bonobo/Unknown:1.0"/>
                </oaf_attribute>
                <oaf_attribute name="name" type="string" value="Python applet example"/>
                <oaf_attribute name="description" type="string" value="Python applet example"/>
        </oaf_server>

        <oaf_server iid="OAFIID:GNOME_PysampleApplet"
                    type="factory" location="OAFIID:GNOME_PysampleApplet_Factory">

                <oaf_attribute name="repo_ids" type="stringv">
                        <item value="IDL:GNOME/Vertigo/PanelAppletShell:1.0"/>
                        <item value="IDL:Bonobo/Control:1.0"/>
                        <item value="IDL:Bonobo/Unknown:1.0"/>
                </oaf_attribute>
                <oaf_attribute name="name" type="string" value="Python applet example"/>
                <oaf_attribute name="description" type="string" value="Python applet example"/>
                <oaf_attribute name="panel:category" type="string" value="Utility"/>
                <oaf_attribute name="panel:icon" type="string" value="bug-buddy.png"/>
        </oaf_server>
        </oaf_info>

Selecter ★★★★
() автор топика

Все в питоне хорошо, кроме обязательных пробелов и жуткой смеси CamelCase, camelCase и hypen_style. Ужос.

Вот за что люблю Си - там такого бардака нету (или не в таком количестве), чего не скажешь о С++ и Java. Си рулит.

logIN
()
Ответ на: комментарий от bugmaker

> Ну, апплет...

Хе-хе. Я думаю, тот кто освоил Дзен языка Си, тот апплеты просто презирает. ;-)

Куда проще alias blah="echo ... > /sys/devices/system/cpu/cpu0/cpufreq/..." прописать. ;-)

logIN
()

может проще поставить powernowd?

>cmd = 'cp /etc/conf.d/cpufrequtils.ondemand /etc/conf.d/cpufrequtils'

юзер пишет в /etc ?

имхо на keybindingах проще - не надо мышой целиться

Pi ★★★★★
()
Ответ на: комментарий от bugmaker

> Апплет не переключения полиции, а апплет для переключения с питона на си

А разве в 11-ой слаке еще нету?

logIN
()
Ответ на: комментарий от Selecter

С этим сложнее, я искал по "cpufreq", в результате засобачил cpufreqd и пакет гномовых апплетов, включающий сию примочку, особо не запоминая названия. После чего она стала доступна для добавления на панель (right click + add... etc). Потроха оной утилы назвываются GNOME_CPUFreqApplet.

Удобная фенька, но есть минус - conservative-манагер в Убунте настроен на редкую тормознутость, частоту зарезает на ступень, потом долго (терпения хватило на 15 минут) на ней висит, посему там хз, лучше наверное userspace, коему я не очень доверяю.

Gharik
()
Ответ на: комментарий от logIN

> Куда проще alias blah="echo ... > /sys/devices/system/cpu/cpu0/cpufreq/..." прописать. ;-)

ты на пару с селектером ниасилил cpufreqd? :)

JB ★★★★★
()
Ответ на: комментарий от Gharik

попробуй режим ondemand

у меня с ним ноут даже работая от сети держит частоту 800 и поднимает до 1700 только под нагрузкой

JB ★★★★★
()

Конечно стереотипно но: это не унихвей! Вот что будет если у тебя ни с того ни с сего рухнет Х или гном или просто панель. Или там еще что. Чтоб такие вещи контролировать есть cpurfreqd и иже с ними а также замечательный governer - conservative. А это все от лукавого потому что таким образом можно дорости до ядра которое работает как апплет у гнома в панели.

Krechet
()
Ответ на: комментарий от JB

Так conservative в vanilla-ядре - примерно то же самое, на LFS-ке домашней переключение на ступень занимает секунд 15, а в Убунте время задрано жутко. Собственно ванильный conservative на турионе отрабатывает точно так же быстро и мелочью типа просмотра киношек или листания сканеной манги даже не озадачивается, сохраняя 800MHz.

Gharik
()
Ответ на: комментарий от Krechet

cpufreqd - фтопку бы неплохо, если честно, достаточно в стартовых скриптах активацию conservative задать и все, а для этого нужнаы лишь только cpufreqd-utils, ибо стремно демону давать контроль над частотой проца и т.п.

Gharik
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.