Vous n'êtes pas identifié(e).
Voici une version en C du menu d'extinction de ma version OpenBox de Kali Linux, comme je n'utilise pas de compte utilisateur, je n'ai pas pris la peine de le rendre compatible en compte utilisateur simple.
Cela change du menu classique que je récupérais en python sous crunchbang et ça me permet de m'entrainer au C + gtk.
J'ai récupérer l'icone ici:
Voici la comande de compilation
gcc -o kl-exit kl-exit.c `pkg-config --libs --cflags gtk+-2.0`
#include <gtk/gtk.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
GdkPixbuf *create_pixbuf(const gchar * filename)
{
GdkPixbuf *pixbuf;
GError *error = NULL;
pixbuf = gdk_pixbuf_new_from_file(filename, &error);
if(!pixbuf) {
fprintf(stderr, "%s\n", error->message);
g_error_free(error);
}
return pixbuf;
}
static void
log_out (GtkWidget *widget,
gpointer data)
{
system("openbox --logout");
}
static void
shut_down (GtkWidget *widget,
gpointer data)
{
system("init 0");
}
static void
re_boot (GtkWidget *widget,
gpointer data)
{
system("init 6");
}
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *fixed;
GtkWidget *button1;
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *button4;
char dest[] = "Logout ";
char var, * p;
p = getenv("USER");
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), strncat(dest, p, strlen(p)));
gtk_window_set_default_size(GTK_WINDOW(window), 370, 55);
gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("Power-Shutdown.png"));
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
button1 = gtk_button_new_with_label("Cancel");
g_signal_connect (button1, "clicked", G_CALLBACK (gtk_main_quit), NULL);
gtk_fixed_put(GTK_FIXED(fixed), button1, 10, 10);
gtk_widget_set_size_request(button1, 80, 35);
button2 = gtk_button_new_with_label("Logout");
g_signal_connect (button2, "clicked", G_CALLBACK (log_out), NULL);
gtk_fixed_put(GTK_FIXED(fixed), button2, 100, 10);
gtk_widget_set_size_request(button2, 80, 35);
button3 = gtk_button_new_with_label("Reboot");
g_signal_connect (button3, "clicked", G_CALLBACK (re_boot), NULL);
gtk_fixed_put(GTK_FIXED(fixed), button3, 190, 10);
gtk_widget_set_size_request(button3, 80, 35);
button4 = gtk_button_new_with_label("Quit");
g_signal_connect (button4, "clicked", G_CALLBACK (shut_down), NULL);
gtk_fixed_put(GTK_FIXED(fixed), button4, 280, 10);
gtk_widget_set_size_request(button4, 80, 35);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
Salut,
Est-ce que les blocs de texte suivants:
static void
shut_down (GtkWidget *widget,
gpointer data)
{
system("init 0");
}
static void
re_boot (GtkWidget *widget,
gpointer data)
{
system("init 6");
}
Impliqueraient que ça fonctionne avec system V uniquement ? Si c'est oui, penses-tu pouvoir aussi faire fonctionner ce programme avec upstart et avec systemd ?
Dernière modification par mélodie (24-10-2013 06:24:50)
Hors ligne
J'imagine que c'est pour Archlinux, je vais voir pour modifier le code pour ce système et je te tien au courant mais c'est selon mon emploi du temps.
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
J'imagine que c'est pour Archlinux, je vais voir pour modifier le code pour ce système et je te tien au courant mais c'est selon mon emploi du temps.
Pour ma part j'utilise obsession, créé par mimas après que tu m'aies fait la remarque sur le mode de gestion de l'extinction quand tu avais testé Bento (Ubuntu Openbox Remix). Je ne faisais qu'une suggestion au cas où tu voudrais que ton code soit utilisable sur plus de distributions, alors en ce qui me concerne il n'y a rien d'urgent.
(Archlinux utilise Systemd, Debian peut l'employer mais ce n'est pas par défaut dans la stable si j'ai tout compris, Gentoo utilise son système d'init bien à lui mais l'utilisateur peut passer à systemd... et Upstart est utilisé dans les Ubuntu et dérivées).
Dernière modification par mélodie (25-10-2013 00:32:12)
Hors ligne
en fait il suffit simplement de modifier la disposition des bouton et de la fenêtre de obsession dont je viens de regarder les sources et qui est bien plus abouti pour fontionner sur plus de système que le mien, (systemv et upower)
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
en fait il suffit simplement de modifier la disposition des bouton et de la fenêtre de obsession dont je viens de regarder les sources et qui est bien plus abouti pour fontionner sur plus de système que le mien, (systemv et upower)
Le code vient de lxsession-logout du projet Lxde, et la fenêtre peut aussi être personnalisée:
http://forum.linuxvillage.org/index.php … 03#msg3403
Hors ligne
Huhuhu, L'« excellent » Megaforce : https://www.youtube.com/watch?v=N9wlm9tbA8s
Tu peux aussi faire une interface graphique en GTKdialog (ou truc dans le genre) qui fait appel au programme en mode console obsession-exit pour l'extinction ou le redémarrage. Cela t'évitera de modifier le code. Ou alors tu fais ton interface et des appels avec dbus-send pour arrêter et redémarrer la machine.
Bref, le choix ne manque pas.
Hors ligne