diff options
author | Jean-Yves Lefort <jylefort@FreeBSD.org> | 2006-05-04 03:35:14 +0000 |
---|---|---|
committer | Jean-Yves Lefort <jylefort@FreeBSD.org> | 2006-05-04 03:35:14 +0000 |
commit | 4c3f5f5b09cf1ac31598175397134a81782b1274 (patch) | |
tree | 8b650ef167a158a3861c5a3e25e85a7a1f5b805b /sysutils/sensors-applet | |
parent | c024a8ca1ebb13215c3df5e40fb19c3bfe427f06 (diff) | |
download | ports-4c3f5f5b09cf1ac31598175397134a81782b1274.tar.gz ports-4c3f5f5b09cf1ac31598175397134a81782b1274.zip |
Notes
Diffstat (limited to 'sysutils/sensors-applet')
-rw-r--r-- | sysutils/sensors-applet/Makefile | 19 | ||||
-rw-r--r-- | sysutils/sensors-applet/files/mbmon-sensors-interface.c | 12 | ||||
-rw-r--r-- | sysutils/sensors-applet/files/mbmon-sensors-interface.h | 4 | ||||
-rw-r--r-- | sysutils/sensors-applet/files/patch-src_Makefile.in | 13 | ||||
-rw-r--r-- | sysutils/sensors-applet/files/patch-src_sensors-applet.c | 8 | ||||
-rw-r--r-- | sysutils/sensors-applet/files/patch-src_sensors-applet.h | 20 | ||||
-rw-r--r-- | sysutils/sensors-applet/files/smartctl-helper.c | 53 | ||||
-rw-r--r-- | sysutils/sensors-applet/files/smartctl-sensors-interface.c | 198 | ||||
-rw-r--r-- | sysutils/sensors-applet/files/smartctl-sensors-interface.h | 30 | ||||
-rw-r--r-- | sysutils/sensors-applet/pkg-descr | 3 | ||||
-rw-r--r-- | sysutils/sensors-applet/pkg-plist | 1 |
11 files changed, 339 insertions, 22 deletions
diff --git a/sysutils/sensors-applet/Makefile b/sysutils/sensors-applet/Makefile index 7990eb1a6aa5..03bc4d26c2ba 100644 --- a/sysutils/sensors-applet/Makefile +++ b/sysutils/sensors-applet/Makefile @@ -7,6 +7,7 @@ PORTNAME= sensors-applet PORTVERSION= 1.6.1 +PORTREVISION= 1 CATEGORIES= sysutils MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} @@ -14,16 +15,28 @@ MASTER_SITE_SUBDIR= ${PORTNAME} MAINTAINER= jylefort@FreeBSD.org COMMENT= A GNOME applet displaying hardware sensor values -RUN_DEPENDS= mbmon:${PORTSDIR}/sysutils/mbmon +RUN_DEPENDS= mbmon:${PORTSDIR}/sysutils/mbmon \ + smartctl:${PORTSDIR}/sysutils/smartmontools USE_X_PREFIX= yes USE_GNOME= gnomehack gnomeprefix intlhack gnomepanel GNU_CONFIGURE= yes USE_GMAKE= yes -CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include -DMBMON_EXECUTABLE=\\\"${LOCALBASE}/bin/mbmon\\\"" \ +DEFINES= -DMBMON_EXECUTABLE=\\\"${LOCALBASE}/bin/mbmon\\\" \ + -DSMARTCTL_HELPER=\\\"${PREFIX}/libexec/smartctl-helper\\\" +CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include ${DEFINES}" \ LDFLAGS="-L${LOCALBASE}/lib" post-patch: - @${CP} -f ${FILESDIR}/mbmon-sensors-interface.* ${WRKSRC}/src + @${CP} -f ${FILESDIR}/mbmon-sensors-interface.* \ + ${FILESDIR}/smartctl-sensors-interface.* ${WRKSRC}/src + +post-build: + ${CC} ${CFLAGS} -DSMARTCTL=\"${LOCALBASE}/sbin/smartctl\" \ + -o ${WRKSRC}/smartctl-helper ${FILESDIR}/smartctl-helper.c + +post-install: + ${INSTALL_PROGRAM} ${WRKSRC}/smartctl-helper ${PREFIX}/libexec + ${CHMOD} u+s ${PREFIX}/libexec/smartctl-helper .include <bsd.port.mk> diff --git a/sysutils/sensors-applet/files/mbmon-sensors-interface.c b/sysutils/sensors-applet/files/mbmon-sensors-interface.c index 9fdd8564698a..6c48af42481d 100644 --- a/sysutils/sensors-applet/files/mbmon-sensors-interface.c +++ b/sysutils/sensors-applet/files/mbmon-sensors-interface.c @@ -35,7 +35,7 @@ static struct } mbmon_sensors[] = { { "TEMP0", N_("Main Board"), TEMP_SENSOR, MEM_ICON }, { "TEMP1", N_("CPU"), TEMP_SENSOR, CPU_ICON }, - { "TEMP2", N_("PSU"), TEMP_SENSOR, GENERIC_ICON }, + { "TEMP2", N_("PSU"), TEMP_SENSOR, CASE_ICON }, { "FAN0", N_("Main Board Fan"), FAN_SENSOR, FAN_ICON }, { "FAN1", N_("CPU Fan"), FAN_SENSOR, FAN_ICON }, { "FAN2", N_("PSU Fan"), FAN_SENSOR, FAN_ICON }, @@ -49,7 +49,9 @@ static struct }; static gboolean -mbmon_watch_cb (GIOChannel *source, GIOCondition condition, gpointer user_data) +mbmon_sensors_interface_watch_cb (GIOChannel *source, + GIOCondition condition, + gpointer user_data) { char *line; gsize terminator; @@ -94,7 +96,7 @@ mbmon_watch_cb (GIOChannel *source, GIOCondition condition, gpointer user_data) } void -mbmon_sensors_interface_init(SensorsApplet *sensors_applet) +mbmon_sensors_interface_init (SensorsApplet *sensors_applet) { GError *err = NULL; char *argv[] = { MBMON_EXECUTABLE, "-r", "10", NULL }; @@ -125,7 +127,7 @@ mbmon_sensors_interface_init(SensorsApplet *sensors_applet) channel = g_io_channel_unix_new(mbmon_stdout); g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL); - g_io_add_watch(channel, G_IO_IN, mbmon_watch_cb, NULL); + g_io_add_watch(channel, G_IO_IN, mbmon_sensors_interface_watch_cb, NULL); for (i = 0; i < G_N_ELEMENTS(mbmon_sensors); i++) { @@ -144,7 +146,7 @@ mbmon_sensors_interface_init(SensorsApplet *sensors_applet) } } -gdouble +double mbmon_sensors_interface_get_sensor_value (const gchar *path, const gchar *id, SensorType type, diff --git a/sysutils/sensors-applet/files/mbmon-sensors-interface.h b/sysutils/sensors-applet/files/mbmon-sensors-interface.h index d85d3aa6c28a..3bf7df9b737c 100644 --- a/sysutils/sensors-applet/files/mbmon-sensors-interface.h +++ b/sysutils/sensors-applet/files/mbmon-sensors-interface.h @@ -21,8 +21,8 @@ #include "sensors-applet.h" -void mbmon_sensors_interface_init(SensorsApplet *sensors_applet); -gdouble mbmon_sensors_interface_get_sensor_value(const gchar *path, +void mbmon_sensors_interface_init (SensorsApplet *sensors_applet); +double mbmon_sensors_interface_get_sensor_value (const gchar *path, const gchar *id, SensorType type, GError **error); diff --git a/sysutils/sensors-applet/files/patch-src_Makefile.in b/sysutils/sensors-applet/files/patch-src_Makefile.in index 6c894c86d11a..9cc2997d7826 100644 --- a/sysutils/sensors-applet/files/patch-src_Makefile.in +++ b/sysutils/sensors-applet/files/patch-src_Makefile.in @@ -1,6 +1,6 @@ --- src/Makefile.in.orig Fri Mar 24 15:54:47 2006 -+++ src/Makefile.in Wed May 3 22:09:21 2006 -@@ -206,21 +206,8 @@ ++++ src/Makefile.in Thu May 4 05:03:13 2006 +@@ -206,21 +206,10 @@ sensors-applet.h \ sensors-applet-gconf.c \ sensors-applet-gconf.h \ @@ -20,11 +20,13 @@ - smu-sys-sensors-interface.h \ - $(sensors_SRC) + mbmon-sensors-interface.c \ -+ mbmon-sensors-interface.h ++ mbmon-sensors-interface.h \ ++ smartctl-sensors-interface.c \ ++ smartctl-sensors-interface.h subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -@@ -250,13 +237,8 @@ +@@ -250,13 +239,9 @@ am_sensors_applet_OBJECTS = main.$(OBJEXT) about-dialog.$(OBJEXT) \ active-sensor.$(OBJEXT) prefs-dialog.$(OBJEXT) \ sensor-config-dialog.$(OBJEXT) sensors-applet.$(OBJEXT) \ @@ -36,7 +38,8 @@ - hddtemp-sensors-interface.$(OBJEXT) \ - smu-sys-sensors-interface.$(OBJEXT) $(am__objects_1) + sensors-applet-gconf.$(OBJEXT) \ -+ mbmon-sensors-interface.$(OBJEXT) ++ mbmon-sensors-interface.$(OBJEXT) \ ++ smartctl-sensors-interface.$(OBJEXT) sensors_applet_OBJECTS = $(am_sensors_applet_OBJECTS) sensors_applet_LDADD = $(LDADD) sensors_applet_DEPENDENCIES = diff --git a/sysutils/sensors-applet/files/patch-src_sensors-applet.c b/sysutils/sensors-applet/files/patch-src_sensors-applet.c index 74d75227348e..895940b24225 100644 --- a/sysutils/sensors-applet/files/patch-src_sensors-applet.c +++ b/sysutils/sensors-applet/files/patch-src_sensors-applet.c @@ -1,6 +1,6 @@ --- src/sensors-applet.c.orig Fri Mar 24 15:42:32 2006 -+++ src/sensors-applet.c Wed May 3 22:07:12 2006 -@@ -29,22 +29,13 @@ ++++ src/sensors-applet.c Thu May 4 04:57:32 2006 +@@ -29,22 +29,14 @@ #include "sensors-applet.h" #include "active-sensor.h" #include "sensors-applet-gconf.h" @@ -21,10 +21,11 @@ -#include "smu-sys-sensors-interface.h" -#include "hddtemp-sensors-interface.h" +#include "mbmon-sensors-interface.h" ++#include "smartctl-sensors-interface.h" #include "prefs-dialog.h" #include "about-dialog.h" -@@ -754,19 +745,10 @@ +@@ -754,19 +746,11 @@ } static void sensors_applet_setup_sensors_interfaces(SensorsApplet *sensors_applet) { @@ -42,6 +43,7 @@ - pmu_sys_sensors_interface_init(sensors_applet); - smu_sys_sensors_interface_init(sensors_applet); + mbmon_sensors_interface_init(sensors_applet); ++ smartctl_sensors_interface_init(sensors_applet); } diff --git a/sysutils/sensors-applet/files/patch-src_sensors-applet.h b/sysutils/sensors-applet/files/patch-src_sensors-applet.h index e1d1c60871fe..7e73a9fcdca0 100644 --- a/sysutils/sensors-applet/files/patch-src_sensors-applet.h +++ b/sysutils/sensors-applet/files/patch-src_sensors-applet.h @@ -1,6 +1,18 @@ --- src/sensors-applet.h.orig Fri Mar 24 15:44:07 2006 -+++ src/sensors-applet.h Wed May 3 22:07:18 2006 -@@ -42,31 +42,15 @@ ++++ src/sensors-applet.h Thu May 4 04:58:05 2006 +@@ -32,41 +32,28 @@ + #define CPU_ICON PIXMAPS_DIR "cpu-icon.png" + #define HDD_ICON PIXMAPS_DIR "hdd-icon.png" + #define BATTERY_ICON PIXMAPS_DIR "battery-icon.png" +-#define MEM_ICON PIXMAPS_DIR "mem-icon.png" ++#define MEM_ICON PIXMAPS_DIR "memory-icon.png" + #define GPU_ICON PIXMAPS_DIR "gpu-icon.png" + #define GENERIC_ICON PIXMAPS_DIR "generic-icon.png" + #define FAN_ICON PIXMAPS_DIR "fan-icon.png" ++#define CASE_ICON PIXMAPS_DIR "case-icon.png" + #define VOLTAGE_ICON NULL + + #define DEFAULT_ICON_SIZE 24 typedef enum { UNUSED = 0, /* as a flag to test against later */ @@ -15,6 +27,7 @@ - PMU_SYS, - SMU_SYS, + MBMON, ++ SMARTCTL, N_SENSOR_INTERFACES } SensorInterface; @@ -30,7 +43,8 @@ - "omnibook", - "pmu-sys", - "smu-sys", -+ "mbmon" ++ "mbmon", ++ "smartctl" }; /* enumeration used to identify columns in the GtkTreeStore data diff --git a/sysutils/sensors-applet/files/smartctl-helper.c b/sysutils/sensors-applet/files/smartctl-helper.c new file mode 100644 index 000000000000..fe9aa4a3e3c9 --- /dev/null +++ b/sysutils/sensors-applet/files/smartctl-helper.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2006 Jean-Yves Lefort <jylefort@FreeBSD.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> + +static void +smartctl_helper_usage (void) +{ + fprintf(stderr, "Usage: smartctl-helper enable|attributes DEVICE\n"); + exit(1); +} + +int +main (int argc, char **argv) +{ + if (argc != 3) + smartctl_helper_usage(); + + if (! strcmp(argv[1], "enable")) + { + char *smartctl_argv[] = { "smartctl", "-s", "on", argv[2], NULL }; + execve(SMARTCTL, smartctl_argv, NULL); + } + else if (! strcmp(argv[1], "attributes")) + { + char *smartctl_argv[] = { "smartctl", "-A", argv[2], NULL }; + execve(SMARTCTL, smartctl_argv, NULL); + } + else + smartctl_helper_usage(); + + /* execve failed */ + fprintf(stderr, "Unable to execute %s\n", SMARTCTL); + return 1; +} diff --git a/sysutils/sensors-applet/files/smartctl-sensors-interface.c b/sysutils/sensors-applet/files/smartctl-sensors-interface.c new file mode 100644 index 000000000000..c3c4b3de8642 --- /dev/null +++ b/sysutils/sensors-applet/files/smartctl-sensors-interface.c @@ -0,0 +1,198 @@ +/* + * Copyright (C) 2006 Jean-Yves Lefort <jylefort@FreeBSD.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdlib.h> +#include <time.h> + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /* HAVE_CONFIG_H */ + +#include "smartctl-sensors-interface.h" +#include "sensors-applet.h" + +/* be gentle */ +#define POLL_INTERVAL 30 + +typedef struct +{ + time_t last_poll; + double value; +} SensorInfo; + +static GHashTable *sensors; + +static gboolean +smartctl_sensors_interface_run (const char *command, + const char *device, + char **output) +{ + char *argv[4]; + GSpawnFlags flags = G_SPAWN_STDERR_TO_DEV_NULL; + char *_output = NULL; + int exit_status; + + g_return_val_if_fail(command != NULL, FALSE); + g_return_val_if_fail(device != NULL, FALSE); + + argv[0] = SMARTCTL_HELPER; + argv[1] = (char *) command; + argv[2] = (char *) device; + argv[3] = NULL; + + if (! output) + flags |= G_SPAWN_STDOUT_TO_DEV_NULL; + + if (g_spawn_sync(NULL, argv, NULL, flags, NULL, NULL, output ? &_output : NULL, NULL, &exit_status, NULL)) + { + if (exit_status == 0) + { + if (output) + *output = _output; + + return TRUE; + } + g_free(_output); + } + + return FALSE; +} + +static gboolean +smartctl_sensors_interface_get_temperature (const char *device, double *temp) +{ + char *output; + char **lines; + int i; + gboolean status = FALSE; + + g_return_val_if_fail(device != NULL, FALSE); + + if (! smartctl_sensors_interface_run("attributes", device, &output)) + return FALSE; + + lines = g_strsplit(output, "\n", 0); + g_free(output); + + for (i = 0; lines[i]; i++) + if (g_str_has_prefix(lines[i], "194 Temperature_Celsius")) + { + char *p; + + p = strrchr(lines[i], ' '); + if (p) + { + double _temp; + char *end; + + _temp = strtod(p + 1, &end); + if (*end == 0) + { + status = TRUE; + if (temp) + *temp = _temp; + } + } + + break; + } + g_strfreev(lines); + + return status; +} + +static void +smartctl_sensors_interface_disk_init (SensorsApplet *sensors_applet, + const char *disk, + int unit) +{ + char *device; + + g_return_if_fail(sensors_applet != NULL); + g_return_if_fail(disk != NULL); + + device = g_strdup_printf("/dev/%s%i", disk, unit); + if (g_file_test(device, G_FILE_TEST_EXISTS) + && smartctl_sensors_interface_run("enable", device, NULL) + && smartctl_sensors_interface_get_temperature(device, NULL)) + { + char *path; + char *label; + + path = g_strdup_printf("/smartctl%s", device); + label = g_strdup_printf("%s%i", disk, unit); + + sensors_applet_add_sensor(sensors_applet, + path, + device, + label, + SMARTCTL, + TRUE, + TEMP_SENSOR, + HDD_ICON); + + g_free(path); + g_free(label); + } + g_free(device); +} + +void +smartctl_sensors_interface_init (SensorsApplet *sensors_applet) +{ + int i; + + sensors = g_hash_table_new(g_str_hash, g_str_equal); + + sensors_applet_register_sensors_interface(sensors_applet, + SMARTCTL, + smartctl_sensors_interface_get_sensor_value); + + /* smartctl supports ad(4) and da(4) disks */ + for (i = 0; i < 10; i++) + { + smartctl_sensors_interface_disk_init(sensors_applet, "ad", i); + smartctl_sensors_interface_disk_init(sensors_applet, "da", i); + } +} + +double +smartctl_sensors_interface_get_sensor_value (const gchar *path, + const gchar *id, + SensorType type, + GError **error) +{ + SensorInfo *info; + time_t now; + + info = g_hash_table_lookup(sensors, id); + if (! info) + { + info = g_new0(SensorInfo, 1); + g_hash_table_insert(sensors, g_strdup(id), info); + } + + now = time(NULL); + if (now == -1 || now - info->last_poll >= POLL_INTERVAL) + { + info->last_poll = now; + smartctl_sensors_interface_get_temperature(id, &info->value); + } + + return info->value; +} diff --git a/sysutils/sensors-applet/files/smartctl-sensors-interface.h b/sysutils/sensors-applet/files/smartctl-sensors-interface.h new file mode 100644 index 000000000000..03b3b099a475 --- /dev/null +++ b/sysutils/sensors-applet/files/smartctl-sensors-interface.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2006 Jean-Yves Lefort <jylefort@FreeBSD.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef SMARTCTL_SENSORS_INTERFACE_H +#define SMARTCTL_SENSORS_INTERFACE_H + +#include "sensors-applet.h" + +void smartctl_sensors_interface_init (SensorsApplet *sensors_applet); +double smartctl_sensors_interface_get_sensor_value (const gchar *path, + const gchar *id, + SensorType type, + GError **error); + +#endif /* SMARTCTL_SENSORS_INTERFACE_H*/ diff --git a/sysutils/sensors-applet/pkg-descr b/sysutils/sensors-applet/pkg-descr index 412a6f079e8f..a7dbe3e0ad13 100644 --- a/sysutils/sensors-applet/pkg-descr +++ b/sysutils/sensors-applet/pkg-descr @@ -1,7 +1,8 @@ GNOME Sensors Applet is an applet for the GNOME Panel to display readings from hardware sensors, including CPU temperature, fan speeds and voltage readings. -On FreeBSD, sensor values are obtained from the sysutils/mbmon port. +On FreeBSD, sensor values are obtained from the sysutils/mbmon (for +motherboards) and sysutils/smartmontools (for hard disks) ports. WWW: http://sensors-applet.sourceforge.net/ diff --git a/sysutils/sensors-applet/pkg-plist b/sysutils/sensors-applet/pkg-plist index 0545b76efab1..806e76d46d97 100644 --- a/sysutils/sensors-applet/pkg-plist +++ b/sysutils/sensors-applet/pkg-plist @@ -1,5 +1,6 @@ libdata/bonobo/servers/SensorsApplet.server libexec/sensors-applet +libexec/smartctl-helper share/gnome/gnome-2.0/ui/SensorsApplet.xml share/gnome/help/sensors-applet/C/figures/applet_in_panel.png share/gnome/help/sensors-applet/C/legal.xml |