yes, install it

Tags: , ,
1 Comment »

3 ans plus tard, c’est arrivé. Y’a pas à chier, ça fait quelque chose.

sysutils/conky

Tags: , , , ,
4 Comments »

Tout ça, c’est la faute à Guigui2. Et à Nils aussi.

Y’a quoi, 2/3 semaines, ces deux là me disent que ce serait tellement bieeeen si on avait conky dans pkgsrc et que patati le challeeenge et que patata tellement c’est beau tellement y’a des thèmes de ouf et j’en passe et des meilleures.

Et je regarde.

Et c’est l’engrenage.

Deux semaines plus tard donc, je viens d’importer sysutils/conky dans pkgsrc current avec le support des sensors usuels, CPU (SMP), load, mémoire, réseau, disque ainsi que batterie et température. Et ces deux derniers, c’étaient pas les plus simples.

En effet, si par exemple FreeBSD dispose de sysctl fort conviviaux du type hw.acpi.battery.time ou hw.acpi.battery.life, bin nous non. Nous on préfère se faire chier avec envsys(3) dont l’utilisation est expliquée de manière parfaite par ce commentaire trouvé dans sysutils/torsmo:

    /*
     * Using the envsys API is like pulling teeth without anesthetic.
     * so just popen envstat and parse the output instead.
     */

Ça résume assez bien la situation.
Mais comme je suis un peu sado-maso sur les bords, et que je souhaitais présenter un peu plus que le pourcentage de charge de la batterie, je me suis lancé dans l’écriture d’une petite fonction qui simplifie grandement l’accès aux ressources d’envsys. En gros ça donne ça:

#include <sys /envsys.h>
#include <prop /proplib.h>

#define _DEV_SYSMON "/dev/sysmon"

#define P_BOOL      0
#define P_UINT8     1
#define P_INT64     2
#define P_STRING    3

typedef struct Devquery {
    int         type;
    char        *dev;
    char        *key;
    char        *row;
} Devquery;

int             sysmon_fd;

int8_t envsys_get_val(Devquery, void *);

void
sysmon_open()
{
    sysmon_fd = open(_DEV_SYSMON, O_RDONLY);
}

void
sysmon_close()
{   
    if (sysmon_fd > -1)
        close(sysmon_fd);
}

int8_t
envsys_get_val(Devquery dq, void *val)
{   
    char *descr;
    const char *cval;
    prop_dictionary_t dict;
    prop_object_t device;
    prop_object_iterator_t iter;
    prop_object_t obj;
    bool rc = false;

    if (sysmon_fd < 0)
        return -1;

    if (prop_dictionary_recv_ioctl(sysmon_fd, ENVSYS_GETDICTIONARY, &dict)
        != 0)
        return -1;

    if ((device = prop_dictionary_get(dict, dq.dev)) == NULL)
        return -1;

    iter = prop_array_iterator(device);

    while((obj = prop_object_iterator_next(iter)))  {
        descr = (char *)prop_string_cstring_nocopy(prop_dictionary_get(obj,
                "description"));
        if (descr != NULL && *descr) {
            if(strcmp(descr, dq.key) == 0) {
                switch(dq.type) {
                case P_BOOL:
                    rc = prop_dictionary_get_bool(obj,
                        dq.row, (bool *)val);
                case P_UINT8:
                    rc = prop_dictionary_get_uint8(obj,
                        dq.row, (uint8_t *)val);
                    break;
                case P_INT64:
                    rc = prop_dictionary_get_int64(obj, dq.row,
                        (int64_t *)val);
                    break;
                case P_STRING:
                    rc = prop_dictionary_get_cstring_nocopy(obj,
                        dq.row, &cval);
                    val = (void *)cval;
                    break;
                }
            }
        }
    }

    prop_object_iterator_release(iter);
    prop_object_release(dict);

    if (rc == false) {
        val = NULL;
        return -1;
    }

    return 0;
}

On utilise la fonction de cette façon:

    Devquery dq_ac = { P_BOOL, "acpiacad0", "connected", "cur-value" };

    if (envsys_get_val(dq_ac, (void *)&connected) < 0)

Dans cet exemple, connected sera placé à 1 si l'élément acpiacad0 est connecté, 0 autrement.

Le package n'est pas encore parfait, mais il est désormais tout à fait utilisable. Upstream a été contacté et l'integration de mes patchs est en cours.

Mandatory screenshot:

WP Theme & Icons based on GlossyBlue by N.Design Studio
Banner from www.trynthlas.com
Entries RSS Comments RSS Log in
Performance Optimization WordPress Plugins by W3 EDGE