рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП * .so рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдЕрд╕реЗрдВрдмрд▓реА рдЙрдмрдВрдЯреВ рдХреЗ рдЕрдзреАрди рд╣реИ, рд╕реА рдФрд░ рдЬреАрдЯреАрдХреЗ + рдХреЗ рдиреНрдпреВрдирддрдо рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЯреНрд░реЗрдирд┐рдВрдЧ
- Lxpanel рд╕реНрд░реЛрдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
рдЗрдХреЛ "рдбреАрдм-рдПрд╕рдХреЗрдЯреА http://mirror.yandex.ru/ubuntu maverick рдореБрдЦреНрдп рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдмреНрд░рд╣реНрдорд╛рдВрдб рдорд▓реНрдЯреАрд╡рд░реНрд╕" >> / etc / apt / source.list
apt-get update && apt-get source lxpanel
рд╕реАрдбреА lxpanel-0.5.6
- рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдХреБрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
apt-get build-dep lxpanel
- рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
LIBS = "-lX11" ред / config --prefix = / usr --with-plugins = cpufreq
рдореЗрдХрдЕрдк
ls src / plugins / cpufreq / .libs / cpufreq.so
Cpufreq рдкреНрд▓рдЧрдЗрди рдХреЛ рдкреАрдбрд╝рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдХреНрдпреЛрдВред рдФрд░ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧ-рдЗрди рд▓рд┐рдЦреЗрдВрдЧреЗ <-> ondemand рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЛрдбред
рд▓реЗрдЦрди
vim src / plugins / cpufreq / my_plugin.c
рджрд░рдЕрд╕рд▓, рд╕рднреА рдХреЛрдб рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде:
- / **
- * рдорд╛рдп_рдкреНрд▓рдЧрд┐рди
- * рд╣рдмреНрд░рд╣рд╛
- * /
- # рдЕрд▓рдЧ рдХрд░реЗрдВ <sys / types.h>
- # рдЕрд▓рдЧ рдХрд░реЗрдВ <stdio.h>
- # рдЕрд▓рдЧ рдХрд░рдирд╛ <stdlib.h>
- # рдХрд┐рдВрдХрд░реНрддрд╡реНрдпрд╡рд┐рдореВрдврд╝ <glib / gi18n.h>
- # рдЕрд▓рдЧ рдХрд░реЗрдВ <string.h>
- #include "panel.h"
- # рдЧрд▓рдд "misc.h"
- #include "plugin.h"
- // рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП
- #define STREQV (a, b) (* (a) == * (b) && strcmp ((a), (b)) == 0)
- // рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛
- рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
- // рд╡рд┐рдЬреЗрдЯ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЖрдЗрдХрди рдФрд░ рдПрдХ рдореЗрдиреВ рд╣реЛрдЧрд╛
- GtkWidget * namew ;
- } my_plugin ;
- // рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ
- рд╕реНрдерд┐рд░ my_plugin * рдПрдордкреА ;
- // рдкреНрд▓рдЧрдЗрди рд╕рдВрд░рдЪрдирд╛ src / plugin.h рдореЗрдВ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ
- // * mp_p - рдЕрдм рдкреНрд▓рдЧрдЗрди рд╡рд░реНрдЧ
- // рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдкреЗрд░реЗрдВрдЯ рдХрдВрдЯреЗрдирд░ mp_p-> pwid рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
- // рд╣рдорд╛рд░рд╛ рд╡рд┐рдЬреЗрдЯ mp-> рдирдореНрдпреБ "рдЗрд╕рдореЗрдВ" рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ
- // рдФрд░ рдЖрдЗрдХрди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, mp-> namew рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ
- // рдореМрдд рдмрд╣реБрдд рджрд┐рдиреЛрдВ рддрдХ рдЫрд┐рдкреА рд░рд╣реА
- рд╕реНрдерд┐рд░ рдкреНрд▓рдЧрдЗрди * mp_p ;
- // рд╢реАрд░реНрд╖рдХ рдЕрдкрдиреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ
- рд╕реНрдерд┐рд░ рдЪрд╛рд░ get_governor ( ) {
- File * fpipe ;
- рдХреЙрдиреНрд╕реНрдЯ рдЪрд╛рд░ рдЧрд╡рд░реНрдирд░ [ 16 ] ;
- рдЪрд╛рд░ рд▓рд╛рдЗрди [ 16 ] ;
- // cpufreq-info рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛
- // рд╕реНрдХреНрд░рд┐рдкреНрдЯ / usr / рд╕реНрдерд╛рдиреАрдп / рдмрд┐рди / cpufreq-gov рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ
- fpipe = ( FILE * ) рдкреЛрдкреЗрди ( "/ usr / рд▓реЛрдХрд▓ / рдмрд┐рди / cpufreq-gov" , "r" ) ;
- рдлрд┐рдЯреНрд╕ ( рд▓рд╛рдЗрди , рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ ( рд▓рд╛рдЗрди ) , fpipe ) ;
- pclose ( fpipe ) ;
- рд╡рд╛рдкрд╕реА рдХреА рд░реЗрдЦрд╛ ;
- }
- // рд╢реАрд░реНрд╖рдХ рдЕрдкрдиреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ
- рд╕реНрдерд┐рд░ рдЪрд╛рд░ get_frequency ( ) {
- File * fpipe ;
- рдХреЙрдиреНрд╕реНрдЯ рдЪрд╛рд░ рдЧрд╡рд░реНрдирд░ [ 16 ] ;
- рдЪрд╛рд░ рд▓рд╛рдЗрди [ 16 ] ;
- // cpufreq-info рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛
- // рд╕реНрдХреНрд░рд┐рдкреНрдЯ / usr / рд╕реНрдерд╛рдиреАрдп / рдмрд┐рди / cpufreq-gov рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ
- fpipe = ( File * ) popen ( "cpufreq-info -f -m" , "r" ) ;
- рдлрд┐рдЯреНрд╕ ( рд▓рд╛рдЗрди , рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ ( рд▓рд╛рдЗрди ) , fpipe ) ;
- pclose ( fpipe ) ;
- рд▓рд╛рдЗрди [ рд╕реНрдЯреНрд░рд▓реЗрди ( рдкрдВрдХреНрддрд┐ ) - 1 ] = ' \ 0 ' ;
- рд╡рд╛рдкрд╕реА рдХреА рд░реЗрдЦрд╛ ;
- }
- // рдореЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдЖрдЗрдХрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░реЗрдВ
- рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рд░рд┐рдлреНрд░реЗрд╢_рдХреЙрди ( ) {
- // рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
- рдХреЙрдиреНрд╕реНрдЯ рдЪрд╛рд░ рдЧрд╡рд░реНрдирд░ [ 16 ] ;
- char line [ 16 ] = get_governor ( ) ;
- рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( рдЧрд╡рд░реНрдирд░ , "% s" , рд▓рд╛рдЗрди ) ;
- // mp_p-> pwid - GTKWidget рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓ рдХрдВрдЯреЗрдирд░, рдЬрд┐рд╕рдореЗрдВ mp-> namew рд╢рд╛рдорд┐рд▓ рд╣реИ
- // рд╡рд┐рдЬреЗрдЯ MP-> рдирд╛рдо рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдЖрдЗрдХрди рдмрджрд▓реЗрдВ
- gtk_container_remove ( GTK_CONTAINER ( mp_p -> pwid ) , mp -> namit ) ;
- // рдЕрдЧрд░ рдореЛрдб "ondemand" рд╣реИ
- рдЕрдЧрд░ ( STREQV ( рдЧрд╡рд░реНрдирд░ , " рдСрдирдбреЗрдорд╛рдВрдб " ) )
- {
- // рдПрдХ рдЖрдЗрдХрди
- mp -> namew = gtk_image_new_from_file ( "/usr/share/lxpanel/images/cpufreq_ond.png" ) ;
- }
- рдЕрдиреНрдпрдерд╛
- {
- // рдЕрдиреНрдпрдерд╛, рдПрдХ рдФрд░
- mp -> namew = gtk_image_new_from_file ( "/usr/share/lxpanel/images/cpufreq_perf.png" ) ;
- }
- // рд╡рд┐рдЬреЗрдЯ рдХреЛ рдбрд╛рд▓реЗрдВ mp-> рдореВрд▓ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ mp_p-> рдкреАрдкреАрд╡реА
- gtk_container_add ( GTK_CONTAINER ( mp_p -> pwid ) , mp -> рдирдорд╕реНрдХрд╛рд░ ) ;
- gtk_widget_show_all ( mp_p -> pwid ) ;
- }
- // рдлрдВрдХреНрд╢рди рдЪреЗрдВрдЬ рдореЛрдб
- рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рд╕реЗрдЯ_рдЧрдУрд╡рд░ ( GtkWidget * рд╡рд┐рдЬреЗрдЯ , рдЪрд╛рд░ * p ) {{
- const char exec [ 32 ] ;
- рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( рдирд┐рд╖реНрдкрд╛рджрди , "cpufreq-set -g% s" , рдкреА ) ;
- рдкреНрд░рдгрд╛рд▓реА ( рдирд┐рд╖реНрдкрд╛рджрди ) ;
- рд░рд┐рдлреНрд░реЗрд╢_рдХреЛрди ( ) ;
- }
- // рдПрдХ рдореЗрдиреВ рдмрдирд╛рдПрдБ
- рд╕реНрдерд┐рд░ GtkWidget * mp_menu ( ) {
- GtkMenu * рдореЗрдиреВ = gtk_menu_new ( ) ;
- GSList * рд╕рдореВрд╣ = NULL ;
- GtkWidget * рдореЗрдиреВрд┐рдЯреЗрдо , * рд░реЗрдбрд┐рдпреЛ 1 , * рд░реЗрдбрд┐рдпреЛ 2 ;
- File * fpipe ;
- рдХреЙрдиреНрд╕реНрдЯ рдЪрд╛рд░ рдЧрд╡рд░реНрдирд░ [ 16 ] ;
- const char рдЖрд╡реГрддреНрддрд┐ [ 16 ] ;
- рдЪрд╛рд░ рд▓рд╛рдЗрди [ 16 ] ;
- рд▓рд╛рдЗрди = get_governor ( ) ;
- рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( рдЧрд╡рд░реНрдирд░ , "% s" , рд▓рд╛рдЗрди ) ;
- рд▓рд╛рдЗрди = get_frequency ( ) ;
- рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( рдЖрд╡реГрддреНрддрд┐ , "% s" , рд▓рд╛рдЗрди ) ;
- // 1) рдореЗрдиреВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ, рдЖрдЗрдЯрдо рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░реЗрдВ
- menuitem = gtk_menu_item_new_with_label ( рдЖрд╡реГрддреНрддрд┐ ) ;
- gtk_menu_append ( рдореЗрдиреВ , рдореЗрдиреВрдЗрдЯреЗрдо ) ;
- gtk_widget_set_sensitive ( рдореЗрдиреВрдЗрдЯ , FALSE ) ;
- gtk_widget_show ( menuitem ) ;
- // 2) рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдЬреЛрдбрд╝реЗрдВ
- menuitem = gtk_separator_menu_item_new ( ) ;
- gtk_menu_append ( рдореЗрдиреВ , рдореЗрдиреВрдЗрдЯреЗрдо ) ;
- gtk_widget_show ( menuitem ) ;
- // 3) рдореЛрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рд░реЗрдбрд┐рдпреЛ рдмрдЯрди
- Radio1 = gtk_radio_menu_item_new_with_label ( рд╕рдореВрд╣ , "рдмрдЪрдд" ) ;
- рд╕рдореВрд╣ = gtk_radio_menu_item_get_group ( GTK_RADIO_MENU_ITEM ( рд░реЗрдбрд┐рдпреЛ 1 ) ) ;
- рдЕрдЧрд░ ( STREQV ( рдЧрд╡рд░реНрдирд░ , " рдСрдирдбреЗрдорд╛рдВрдб " ) )
- {
- gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM ( рд░реЗрдбрд┐рдпреЛ 1 ) , TRUE ) ;
- }
- gtk_menu_append ( рдореЗрдиреВ , рд░реЗрдбрд┐рдпреЛ 1 ) ;
- gtk_widget_show ( рд░реЗрдбрд┐рдпреЛ 1 ) ;
- // 4) рджреВрд╕рд░рд╛ рдмрдЯрди
- Radio2 = gtk_radio_menu_item_new_with_label ( рд╕рдореВрд╣ , "рдкреНрд░рджрд░реНрд╢рди" ) ;
- рдЕрдЧрд░ ( STREQV ( рд░рд╛рдЬреНрдпрдкрд╛рд▓ , "рдкреНрд░рджрд░реНрд╢рди" ) )
- {
- gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM ( рд░реЗрдбрд┐рдпреЛ 2 ) , TRUE ) ;
- }
- gtk_menu_append ( рдореЗрдиреВ , рд░реЗрдбрд┐рдпреЛ 2 ) ;
- gtk_widget_show ( рд░реЗрдбрд┐рдпреЛ 2 ) ;
- // рдЬрдм рдЖрдк рд░реЗрдбрд┐рдпреЛ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЛрдб рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
- g_signal_connect ( G_OBJECT ( Radio1 ) , "toggled" , G_CALLBACK ( set_governor ) , " ondemand " ) ;
- g_signal_connect ( G_OBJECT ( Radio2 ) , "toggled" , G_CALLBACK ( set_governor ) , "performance" ) ;
- рд╡рд╛рдкрд╕реА рдореЗрдиреВ ;
- }
- // рдкреНрд▓рдЧрдЗрди рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдШрдЯрдирд╛ рдХреЗ рд╣реИрдВрдбрд▓рд░
- рд╕реНрдерд┐рд░ gboolean рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ ( GtkWidget * рд╡рд┐рдЬреЗрдЯ , GdkEventButton * evt , рдкреНрд▓рдЧрдЗрди * рдкреНрд▓рдЧрдЗрди ) {
- gtk_menu_popup ( mp_menu ( ) , NULL , NULL , NULL , NULL , evt -> рдмрдЯрди , evt -> рд╕рдордп ) ;
- TRUE рд▓реМрдЯрд╛рдУ ;
- }
- // рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛
- рд╕реНрдерд┐рд░ рдЗрдВрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ ( рдкреНрд▓рдЧрдЗрди * рдкреА ) {
- // рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ
- рддрдВрддреНрд░_рдЪрдореНрдк = g_new0 ( my_plugin , 1 ) ;
- рдкреА -> рдирд┐рдЬреА = рддрдВрддреНрд░_рдПрдордкреА ;
- // рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдмрдирд╛рдПрдВ (рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ)
- // рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рдЦрд┐рдбрд╝рдХреА рдХреА рд╕рдЬрд╛рд╡рдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
- p -> pwid = gtk_event_box_new ( ) ;
- GTK_WIDGET_SET_FLAGS ( p -> pwid , GTK_NO_WINDOW ) ;
- gtk_container_set_border_width ( GTK_CONTAINER ( p -> pwid ) , 0 ) ;
- // рдЗрдирд┐рд╢рд┐рдпрд▓ рдЖрдЗрдХрди рд╕реЗрдЯ рдХрд░реЗрдВ
- рд░рд┐рдлреНрд░реЗрд╢_рдХреЛрди ( ) ;
- // рдЬрдм рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реБрдЖ () рд╣реИрдВрдбрд▓рд░ рдлрдВрдХреНрд╢рди рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИ
- g_signal_connect ( G_OBJECT ( p -> pwid ) , "button_press_event" , G_CALLBACK ( рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ ) , ( gpointer ) p ) ;
- gtk_widget_show ( рддрдВрддреНрд░_mp -> namew ) ;
- }
- // рд╡рд┐рдзреНрд╡рдВрд╕рдХ
- рд╕реНрдереИрддрд┐рдХ рд╢реВрдиреНрдп рд╡рд┐рдзреНрд╡рдВрд╕рдХ ( рдкреНрд▓рдЧрд┐рди * рдкреА ) {
- my_plugin * рддрдВрддреНрд░_mp = ( my_plugin * ) p -> рдирд┐рдЬреА ;
- g_free ( рддрдВрддреНрд░_рдПрдордкреА ) ;
- }
- // рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ
- PluginClass mp_plugin_class = {
- PLUGINCLASS_VERSIONING ,
- рдкреНрд░рдХрд╛рд░ : "my_plugin" ,
- рдирд╛рдо : N_ ( "рдореЗрд░рд╛ рд╕реБрдкрд░ рдкреНрд▓рдЧрдЗрди" ) ,
- рд╕рдВрд╕реНрдХрд░рдг : "1.0" ,
- рд╡рд┐рд╡рд░рдг : N_ ( " рд╣реИрдмреНрд░рд╛рд╣рд╛рдм " ) ,
- рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ : рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ ,
- рд╡рд┐рдзреНрд╡рдВрд╕рдХ : рд╡рд┐рдзреНрд╡рдВрд╕рдХ ,
- // рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ,
- // рд▓реЗрдХрд┐рди рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ
- // рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓рддреЗ рд╕рдордп рд╡рд┐рдЬреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ
- рд╡рд┐рдиреНрдпрд╛рд╕ : NULL ,
- рд╕рд╣реЗрдЬреЗрдВ : NULL ,
- panel_configuration_changed : NULL
- } ;
рд╕рдВрдХрд▓рди
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдмреЗрд╣рдж рдиреАрд░рд╕ рд╣реИред рддреЛ рдмрд╕ cpufreq рдкреАрдбрд╝рд┐рдд рдкреНрд▓рдЧрдЗрди рд▓реЗ рд▓реЛ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрд░реЛрдд src / plugins / cpufreq / cpufreq.c рдХреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдмрджрд▓реЗрдВ ред
рд╣рдо рдПрдХрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
LIBS = "-lX11" ред / config --prefix = / usr --with-plugins = cpufreq
рдореЗрдХрдЕрдк
рд╕рдорд╛рдкреНрдд * .so src / plugins / cpufreq / .libs / рдореЗрдВ рд╣реИ , рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрд╛рдХреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдХреЗ рддрд╣рдд, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП /usr/lib/lxelel/plugins/my_plugin.so
/ Usr / рд╕реНрдерд╛рдиреАрдп / рдмрд┐рди / cpufreq-gov рдХреА рд╕рд╛рдордЧреНрд░реА :
- #! / рдмрд┐рди / рд╢
- рдЧреВрдВрдЬ ` cpufreq-info -p | awk '{рдкреНрд░рд┐рдВрдЯ $ 3}' '
2 рдЖрдЗрдХрди / usr / рд╢реЗрдпрд░ / lxpanel / рдЪрд┐рддреНрд░ / рдореЗрдВ :
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рд╡реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдореГрджреНрдз рд╣реИрдВред
- src / plugin.c
- src / plugin.h
- src / panel.c
- src / рдкреИрдирд▓.рдПрдЪ
рд╕реМрднрд╛рдЧреНрдп рд╣реИ рдЙрджрд╛рд╣рд░рдг рд╕реНрд░реЛрдд : my_plugin.c