diff -urN gkrellm2-cpufreq-0.6.1-orig/cpufreq.c gkrellm2-cpufreq-0.6.1/cpufreq.c --- gkrellm2-cpufreq-0.6.1-orig/cpufreq.c 2007-07-15 16:01:29.000000000 +0200 +++ gkrellm2-cpufreq-0.6.1/cpufreq.c 2007-08-14 17:14:49.247886178 +0200 @@ -74,6 +74,8 @@ static GkrellmDecal* text_decal_freq[NCPU_MAX]; static GkrellmDecal* text_decal_gov[NCPU_MAX]; +static GkrellmDecalbutton* button_cpu_toggle[NCPU_MAX]; + static GkrellmKrell* slider_krell[NCPU_MAX]; static GkrellmKrell* slider_in_motion[NCPU_MAX]; static double slider_value[NCPU_MAX]; @@ -297,6 +299,25 @@ return FALSE; } +static void cpu_online_toggle(GkrellmDecalbutton *button, gpointer data) +{ + int n = -1, i; + for(i = 0; i < ncpu; i++) + if (button == button_cpu_toggle[i]) + { + n = i; + break; + } + + if (n >= 0) + { + char cmd[length]; + snprintf(cmd, length, "sudo %s/cpu_online_toggle %d", HELPERDIR, n); + system(cmd); + } +} + static void create_plugin(GtkWidget* vbox, gint first_create) { GkrellmStyle* style; GkrellmPiximage* krell_image; @@ -331,6 +352,11 @@ governor_text[cpu] = empty; } + /* the on/off button */ + button_cpu_toggle[cpu] = gkrellm_make_scaled_button(panel, NULL, &cpu_online_toggle, NULL, + TRUE, TRUE, 2, 0, 1, + gkrellm_chart_width() - 9, y, 8, 8); + /* the frequency text */ text_decal_freq[cpu] = gkrellm_create_decal_text(panel, "0123456789 MHz", ts, style, diff -urN gkrellm2-cpufreq-0.6.1-orig/cpu_online_toggle gkrellm2-cpufreq-0.6.1/cpu_online_toggle --- gkrellm2-cpufreq-0.6.1-orig/cpu_online_toggle 1970-01-01 01:00:00.000000000 +0100 +++ gkrellm2-cpufreq-0.6.1/cpu_online_toggle 2007-08-14 17:18:52.418788933 +0200 @@ -0,0 +1,21 @@ +#!/bin/bash + +n=$1 +if [ "$n" = "" ]; then + echo "Usage: $0 " + exit +fi + +sys_file=/sys/devices/system/cpu/cpu${n}/online +if [ ! -f $sys_file ]; then + echo "CPU ${n} is not toggleable" + exit +fi + +old_state=$(cat $sys_file) + +if [ "$old_state" = "1" ]; then + echo -n "0" > $sys_file +else + echo -n "1" > $sys_file +fi diff -urN gkrellm2-cpufreq-0.6.1-orig/Makefile gkrellm2-cpufreq-0.6.1/Makefile --- gkrellm2-cpufreq-0.6.1-orig/Makefile 2007-07-15 16:01:29.000000000 +0200 +++ gkrellm2-cpufreq-0.6.1/Makefile 2007-08-14 17:18:58.971789231 +0200 @@ -12,20 +12,24 @@ OBJS = cpufreq.o +HELPERDIR=$(DESTDIR)/usr/lib/gkrellm2/exec +CFLAGS+=-DHELPERDIR=\"$(HELPERDIR)\" + cpufreq.so: $(OBJS) $(CC) $(OBJS) -o cpufreq.so $(LFLAGS) $(LIBS) -install: cpufreq.so +install: cpufreq.so cpu_online_toggle install -D -m 755 -s cpufreq.so $(DESTDIR)/usr/lib/gkrellm2/plugins/cpufreq.so install -g root -o root -D -m 755 cpufreqnextgovernor $(DESTDIR)/usr/sbin/cpufreqnextgovernor + install -g root -o root -D -m 755 cpu_online_toggle $(HELPERDIR)/cpu_online_toggle install-sudo: echo "$(USER) ALL = (root) NOPASSWD: /usr/bin/cpufreq-set -c [0-9]* -g userspace" >> /etc/sudoers echo "$(USER) ALL = (root) NOPASSWD: /usr/bin/cpufreq-set -c [0-9]* -f [0-9]*" >> /etc/sudoers echo "$(USER) ALL = (root) NOPASSWD: /usr/sbin/cpufreqnextgovernor" >> /etc/sudoers + echo "$(USER) ALL = (root) NOPASSWD: $(HELPERDIR)/cpu_online_toggle" >> /etc/sudoers clean: rm -f *.o core *.so* *.bak *~ cpufreq.o: cpufreq.c -