LXPanel рдХреЗ рд▓рд┐рдП GTK + рдПрдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВ

рдХреИрд╕реЗ LXPanel рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдПрдкреНрд▓реЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░ рдПрдХ рд▓реЗрдЦред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЕрднреА рддрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реНрд░реЛрдд рд╕реЗ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдореГрджреНрдз рд╣реИред

рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП * .so рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред









рдЕрд╕реЗрдВрдмрд▓реА рдЙрдмрдВрдЯреВ рдХреЗ рдЕрдзреАрди рд╣реИ, рд╕реА рдФрд░ рдЬреАрдЯреАрдХреЗ + рдХреЗ рдиреНрдпреВрдирддрдо рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдЯреНрд░реЗрдирд┐рдВрдЧ



  1. Lxpanel рд╕реНрд░реЛрдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

    рдЗрдХреЛ "рдбреАрдм-рдПрд╕рдХреЗрдЯреА http://mirror.yandex.ru/ubuntu maverick рдореБрдЦреНрдп рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдмреНрд░рд╣реНрдорд╛рдВрдб рдорд▓реНрдЯреАрд╡рд░реНрд╕" >> / etc / apt / source.list

    apt-get update && apt-get source lxpanel

    рд╕реАрдбреА lxpanel-0.5.6


  2. рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдХреБрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

    apt-get build-dep lxpanel


  3. рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

    LIBS = "-lX11" ред / config --prefix = / usr --with-plugins = cpufreq

    рдореЗрдХрдЕрдк

    ls src / plugins / cpufreq / .libs / cpufreq.so




Cpufreq рдкреНрд▓рдЧрдЗрди рдХреЛ рдкреАрдбрд╝рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдХреНрдпреЛрдВред рдФрд░ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧ-рдЗрди рд▓рд┐рдЦреЗрдВрдЧреЗ <-> ondemand рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЛрдбред



рд▓реЗрдЦрди



vim src / plugins / cpufreq / my_plugin.c




рджрд░рдЕрд╕рд▓, рд╕рднреА рдХреЛрдб рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде:

  1. / **
  2. * рдорд╛рдп_рдкреНрд▓рдЧрд┐рди
  3. * рд╣рдмреНрд░рд╣рд╛
  4. * /
  5. # рдЕрд▓рдЧ рдХрд░реЗрдВ <sys / types.h>
  6. # рдЕрд▓рдЧ рдХрд░реЗрдВ <stdio.h>
  7. # рдЕрд▓рдЧ рдХрд░рдирд╛ <stdlib.h>
  8. # рдХрд┐рдВрдХрд░реНрддрд╡реНрдпрд╡рд┐рдореВрдврд╝ <glib / gi18n.h>
  9. # рдЕрд▓рдЧ рдХрд░реЗрдВ <string.h>
  10. #include "panel.h"
  11. # рдЧрд▓рдд "misc.h"
  12. #include "plugin.h"
  13. // рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП
  14. #define STREQV (a, b) (* (a) == * (b) && strcmp ((a), (b)) == 0)
  15. // рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛
  16. рдЯрдВрдХрдг рд╕рдВрд░рдЪрдирд╛ {
  17. // рд╡рд┐рдЬреЗрдЯ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЖрдЗрдХрди рдФрд░ рдПрдХ рдореЗрдиреВ рд╣реЛрдЧрд╛
  18. GtkWidget * namew ;
  19. } my_plugin ;
  20. // рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ
  21. рд╕реНрдерд┐рд░ my_plugin * рдПрдордкреА ;
  22. // рдкреНрд▓рдЧрдЗрди рд╕рдВрд░рдЪрдирд╛ src / plugin.h рдореЗрдВ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ
  23. // * mp_p - рдЕрдм рдкреНрд▓рдЧрдЗрди рд╡рд░реНрдЧ
  24. // рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдкреЗрд░реЗрдВрдЯ рдХрдВрдЯреЗрдирд░ mp_p-> pwid рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
  25. // рд╣рдорд╛рд░рд╛ рд╡рд┐рдЬреЗрдЯ mp-> рдирдореНрдпреБ "рдЗрд╕рдореЗрдВ" рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ
  26. // рдФрд░ рдЖрдЗрдХрди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, mp-> namew рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ
  27. // рдореМрдд рдмрд╣реБрдд рджрд┐рдиреЛрдВ рддрдХ рдЫрд┐рдкреА рд░рд╣реА
  28. рд╕реНрдерд┐рд░ рдкреНрд▓рдЧрдЗрди * mp_p ;
  29. // рд╢реАрд░реНрд╖рдХ рдЕрдкрдиреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ
  30. рд╕реНрдерд┐рд░ рдЪрд╛рд░ get_governor ( ) {
  31. File * fpipe ;
  32. рдХреЙрдиреНрд╕реНрдЯ рдЪрд╛рд░ рдЧрд╡рд░реНрдирд░ [ 16 ] ;
  33. рдЪрд╛рд░ рд▓рд╛рдЗрди [ 16 ] ;
  34. // cpufreq-info рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛
  35. // рд╕реНрдХреНрд░рд┐рдкреНрдЯ / usr / рд╕реНрдерд╛рдиреАрдп / рдмрд┐рди / cpufreq-gov рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ
  36. fpipe = ( FILE * ) рдкреЛрдкреЗрди ( "/ usr / рд▓реЛрдХрд▓ / рдмрд┐рди / cpufreq-gov" , "r" ) ;
  37. рдлрд┐рдЯреНрд╕ ( рд▓рд╛рдЗрди , рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ ( рд▓рд╛рдЗрди ) , fpipe ) ;
  38. pclose ( fpipe ) ;
  39. рд╡рд╛рдкрд╕реА рдХреА рд░реЗрдЦрд╛ ;
  40. }
  41. // рд╢реАрд░реНрд╖рдХ рдЕрдкрдиреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ
  42. рд╕реНрдерд┐рд░ рдЪрд╛рд░ get_frequency ( ) {
  43. File * fpipe ;
  44. рдХреЙрдиреНрд╕реНрдЯ рдЪрд╛рд░ рдЧрд╡рд░реНрдирд░ [ 16 ] ;
  45. рдЪрд╛рд░ рд▓рд╛рдЗрди [ 16 ] ;
  46. // cpufreq-info рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛
  47. // рд╕реНрдХреНрд░рд┐рдкреНрдЯ / usr / рд╕реНрдерд╛рдиреАрдп / рдмрд┐рди / cpufreq-gov рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ
  48. fpipe = ( File * ) popen ( "cpufreq-info -f -m" , "r" ) ;
  49. рдлрд┐рдЯреНрд╕ ( рд▓рд╛рдЗрди , рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ ( рд▓рд╛рдЗрди ) , fpipe ) ;
  50. pclose ( fpipe ) ;
  51. рд▓рд╛рдЗрди [ рд╕реНрдЯреНрд░рд▓реЗрди ( рдкрдВрдХреНрддрд┐ ) - 1 ] = ' \ 0 ' ;
  52. рд╡рд╛рдкрд╕реА рдХреА рд░реЗрдЦрд╛ ;
  53. }
  54. // рдореЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдЖрдЗрдХрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░реЗрдВ
  55. рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рд░рд┐рдлреНрд░реЗрд╢_рдХреЙрди ( ) {
  56. // рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
  57. рдХреЙрдиреНрд╕реНрдЯ рдЪрд╛рд░ рдЧрд╡рд░реНрдирд░ [ 16 ] ;
  58. char line [ 16 ] = get_governor ( ) ;
  59. рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( рдЧрд╡рд░реНрдирд░ , "% s" , рд▓рд╛рдЗрди ) ;
  60. // mp_p-> pwid - GTKWidget рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓ рдХрдВрдЯреЗрдирд░, рдЬрд┐рд╕рдореЗрдВ mp-> namew рд╢рд╛рдорд┐рд▓ рд╣реИ
  61. // рд╡рд┐рдЬреЗрдЯ MP-> рдирд╛рдо рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдЖрдЗрдХрди рдмрджрд▓реЗрдВ
  62. gtk_container_remove ( GTK_CONTAINER ( mp_p -> pwid ) , mp -> namit ) ;
  63. // рдЕрдЧрд░ рдореЛрдб "ondemand" рд╣реИ
  64. рдЕрдЧрд░ ( STREQV ( рдЧрд╡рд░реНрдирд░ , " рдСрдирдбреЗрдорд╛рдВрдб " ) )
  65. {
  66. // рдПрдХ рдЖрдЗрдХрди
  67. mp -> namew = gtk_image_new_from_file ( "/usr/share/lxpanel/images/cpufreq_ond.png" ) ;
  68. }
  69. рдЕрдиреНрдпрдерд╛
  70. {
  71. // рдЕрдиреНрдпрдерд╛, рдПрдХ рдФрд░
  72. mp -> namew = gtk_image_new_from_file ( "/usr/share/lxpanel/images/cpufreq_perf.png" ) ;
  73. }
  74. // рд╡рд┐рдЬреЗрдЯ рдХреЛ рдбрд╛рд▓реЗрдВ mp-> рдореВрд▓ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ mp_p-> рдкреАрдкреАрд╡реА
  75. gtk_container_add ( GTK_CONTAINER ( mp_p -> pwid ) , mp -> рдирдорд╕реНрдХрд╛рд░ ) ;
  76. gtk_widget_show_all ( mp_p -> pwid ) ;
  77. }
  78. // рдлрдВрдХреНрд╢рди рдЪреЗрдВрдЬ рдореЛрдб
  79. рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рд╕реЗрдЯ_рдЧрдУрд╡рд░ ( GtkWidget * рд╡рд┐рдЬреЗрдЯ , рдЪрд╛рд░ * p ) {{
  80. const char exec [ 32 ] ;
  81. рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( рдирд┐рд╖реНрдкрд╛рджрди , "cpufreq-set -g% s" , рдкреА ) ;
  82. рдкреНрд░рдгрд╛рд▓реА ( рдирд┐рд╖реНрдкрд╛рджрди ) ;
  83. рд░рд┐рдлреНрд░реЗрд╢_рдХреЛрди ( ) ;
  84. }
  85. // рдПрдХ рдореЗрдиреВ рдмрдирд╛рдПрдБ
  86. рд╕реНрдерд┐рд░ GtkWidget * mp_menu ( ) {
  87. GtkMenu * рдореЗрдиреВ = gtk_menu_new ( ) ;
  88. GSList * рд╕рдореВрд╣ = NULL ;
  89. GtkWidget * рдореЗрдиреВрд┐рдЯреЗрдо , * рд░реЗрдбрд┐рдпреЛ 1 , * рд░реЗрдбрд┐рдпреЛ 2 ;
  90. File * fpipe ;
  91. рдХреЙрдиреНрд╕реНрдЯ рдЪрд╛рд░ рдЧрд╡рд░реНрдирд░ [ 16 ] ;
  92. const char рдЖрд╡реГрддреНрддрд┐ [ 16 ] ;
  93. рдЪрд╛рд░ рд▓рд╛рдЗрди [ 16 ] ;
  94. рд▓рд╛рдЗрди = get_governor ( ) ;
  95. рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( рдЧрд╡рд░реНрдирд░ , "% s" , рд▓рд╛рдЗрди ) ;
  96. рд▓рд╛рдЗрди = get_frequency ( ) ;
  97. рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( рдЖрд╡реГрддреНрддрд┐ , "% s" , рд▓рд╛рдЗрди ) ;
  98. // 1) рдореЗрдиреВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ, рдЖрдЗрдЯрдо рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░реЗрдВ
  99. menuitem = gtk_menu_item_new_with_label ( рдЖрд╡реГрддреНрддрд┐ ) ;
  100. gtk_menu_append ( рдореЗрдиреВ , рдореЗрдиреВрдЗрдЯреЗрдо ) ;
  101. gtk_widget_set_sensitive ( рдореЗрдиреВрдЗрдЯ , FALSE ) ;
  102. gtk_widget_show ( menuitem ) ;
  103. // 2) рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдЬреЛрдбрд╝реЗрдВ
  104. menuitem = gtk_separator_menu_item_new ( ) ;
  105. gtk_menu_append ( рдореЗрдиреВ , рдореЗрдиреВрдЗрдЯреЗрдо ) ;
  106. gtk_widget_show ( menuitem ) ;
  107. // 3) рдореЛрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рд░реЗрдбрд┐рдпреЛ рдмрдЯрди
  108. Radio1 = gtk_radio_menu_item_new_with_label ( рд╕рдореВрд╣ , "рдмрдЪрдд" ) ;
  109. рд╕рдореВрд╣ = gtk_radio_menu_item_get_group ( GTK_RADIO_MENU_ITEM ( рд░реЗрдбрд┐рдпреЛ 1 ) ) ;
  110. рдЕрдЧрд░ ( STREQV ( рдЧрд╡рд░реНрдирд░ , " рдСрдирдбреЗрдорд╛рдВрдб " ) )
  111. {
  112. gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM ( рд░реЗрдбрд┐рдпреЛ 1 ) , TRUE ) ;
  113. }
  114. gtk_menu_append ( рдореЗрдиреВ , рд░реЗрдбрд┐рдпреЛ 1 ) ;
  115. gtk_widget_show ( рд░реЗрдбрд┐рдпреЛ 1 ) ;
  116. // 4) рджреВрд╕рд░рд╛ рдмрдЯрди
  117. Radio2 = gtk_radio_menu_item_new_with_label ( рд╕рдореВрд╣ , "рдкреНрд░рджрд░реНрд╢рди" ) ;
  118. рдЕрдЧрд░ ( STREQV ( рд░рд╛рдЬреНрдпрдкрд╛рд▓ , "рдкреНрд░рджрд░реНрд╢рди" ) )
  119. {
  120. gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM ( рд░реЗрдбрд┐рдпреЛ 2 ) , TRUE ) ;
  121. }
  122. gtk_menu_append ( рдореЗрдиреВ , рд░реЗрдбрд┐рдпреЛ 2 ) ;
  123. gtk_widget_show ( рд░реЗрдбрд┐рдпреЛ 2 ) ;
  124. // рдЬрдм рдЖрдк рд░реЗрдбрд┐рдпреЛ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЛрдб рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  125. g_signal_connect ( G_OBJECT ( Radio1 ) , "toggled" , G_CALLBACK ( set_governor ) , " ondemand " ) ;
  126. g_signal_connect ( G_OBJECT ( Radio2 ) , "toggled" , G_CALLBACK ( set_governor ) , "performance" ) ;
  127. рд╡рд╛рдкрд╕реА рдореЗрдиреВ ;
  128. }
  129. // рдкреНрд▓рдЧрдЗрди рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдШрдЯрдирд╛ рдХреЗ рд╣реИрдВрдбрд▓рд░
  130. рд╕реНрдерд┐рд░ gboolean рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ ( GtkWidget * рд╡рд┐рдЬреЗрдЯ , GdkEventButton * evt , рдкреНрд▓рдЧрдЗрди * рдкреНрд▓рдЧрдЗрди ) {
  131. gtk_menu_popup ( mp_menu ( ) , NULL , NULL , NULL , NULL , evt -> рдмрдЯрди , evt -> рд╕рдордп ) ;
  132. TRUE рд▓реМрдЯрд╛рдУ ;
  133. }
  134. // рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛
  135. рд╕реНрдерд┐рд░ рдЗрдВрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ ( рдкреНрд▓рдЧрдЗрди * рдкреА ) {
  136. // рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ
  137. рддрдВрддреНрд░_рдЪрдореНрдк = g_new0 ( my_plugin , 1 ) ;
  138. рдкреА -> рдирд┐рдЬреА = рддрдВрддреНрд░_рдПрдордкреА ;
  139. // рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдмрдирд╛рдПрдВ (рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ)
  140. // рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рдЦрд┐рдбрд╝рдХреА рдХреА рд╕рдЬрд╛рд╡рдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
  141. p -> pwid = gtk_event_box_new ( ) ;
  142. GTK_WIDGET_SET_FLAGS ( p -> pwid , GTK_NO_WINDOW ) ;
  143. gtk_container_set_border_width ( GTK_CONTAINER ( p -> pwid ) , 0 ) ;
  144. // рдЗрдирд┐рд╢рд┐рдпрд▓ рдЖрдЗрдХрди рд╕реЗрдЯ рдХрд░реЗрдВ
  145. рд░рд┐рдлреНрд░реЗрд╢_рдХреЛрди ( ) ;
  146. // рдЬрдм рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реБрдЖ () рд╣реИрдВрдбрд▓рд░ рдлрдВрдХреНрд╢рди рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИ
  147. g_signal_connect ( G_OBJECT ( p -> pwid ) , "button_press_event" , G_CALLBACK ( рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ ) , ( gpointer ) p ) ;
  148. gtk_widget_show ( рддрдВрддреНрд░_mp -> namew ) ;
  149. }
  150. // рд╡рд┐рдзреНрд╡рдВрд╕рдХ
  151. рд╕реНрдереИрддрд┐рдХ рд╢реВрдиреНрдп рд╡рд┐рдзреНрд╡рдВрд╕рдХ ( рдкреНрд▓рдЧрд┐рди * рдкреА ) {
  152. my_plugin * рддрдВрддреНрд░_mp = ( my_plugin * ) p -> рдирд┐рдЬреА ;
  153. g_free ( рддрдВрддреНрд░_рдПрдордкреА ) ;
  154. }
  155. // рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ
  156. PluginClass mp_plugin_class = {
  157. PLUGINCLASS_VERSIONING ,
  158. рдкреНрд░рдХрд╛рд░ : "my_plugin" ,
  159. рдирд╛рдо : N_ ( "рдореЗрд░рд╛ рд╕реБрдкрд░ рдкреНрд▓рдЧрдЗрди" ) ,
  160. рд╕рдВрд╕реНрдХрд░рдг : "1.0" ,
  161. рд╡рд┐рд╡рд░рдг : N_ ( " рд╣реИрдмреНрд░рд╛рд╣рд╛рдм " ) ,
  162. рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ : рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ ,
  163. рд╡рд┐рдзреНрд╡рдВрд╕рдХ : рд╡рд┐рдзреНрд╡рдВрд╕рдХ ,
  164. // рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ,
  165. // рд▓реЗрдХрд┐рди рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ
  166. // рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓рддреЗ рд╕рдордп рд╡рд┐рдЬреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ
  167. рд╡рд┐рдиреНрдпрд╛рд╕ : NULL ,
  168. рд╕рд╣реЗрдЬреЗрдВ : NULL ,
  169. panel_configuration_changed : NULL
  170. } ;




рд╕рдВрдХрд▓рди



рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдмреЗрд╣рдж рдиреАрд░рд╕ рд╣реИред рддреЛ рдмрд╕ 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 рдХреА рд╕рд╛рдордЧреНрд░реА :

  1. #! / рдмрд┐рди / рд╢
  2. рдЧреВрдВрдЬ ` cpufreq-info -p | awk '{рдкреНрд░рд┐рдВрдЯ $ 3}' '




2 рдЖрдЗрдХрди / usr / рд╢реЗрдпрд░ / lxpanel / рдЪрд┐рддреНрд░ / рдореЗрдВ :





рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ



рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рд╡реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдореГрджреНрдз рд╣реИрдВред





рд╕реМрднрд╛рдЧреНрдп рд╣реИ рдЙрджрд╛рд╣рд░рдг рд╕реНрд░реЛрдд : my_plugin.c



All Articles