انجمن‌های فارسی اوبونتو

جامعه کاربران => پروژه‌ها => نویسنده: مهدی2 در 15 تیر 1388، 02:01 ب‌ظ

عنوان: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 15 تیر 1388، 02:01 ب‌ظ
همه کاربران سلام

اگر دوستان در مورد gtk اطلاعات دارند لطفا بگویید که چگونه می توان اسکریپت های شل (مثلا sudo dpkg -i ****.deb )را با کد های gtk اجرا کرد
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run .sh in gtk)
ارسال شده توسط: سعید رسولی در 15 تیر 1388، 02:59 ب‌ظ
سلام
اگر دوستان در مورد gtk اطلاعات دارند لطفا بگویید که چگونه می توان اسکریپت های شل (مثلا sudo dpkg -i ****.deb )را با کد های gtk اجرا کرد
سوالتون واضح نیست.
1- توی چه زبانی می‌خواید؟ مثلاً C یا ++C یا پایتون؟ (توی هر زبانی می‌تونید یه دستور شل رو اجرا کنید و این ربطی به gtk و کلاً رابط گرافیکی نداره)
2- آیا می‌خواید چیزی شبیه ترمینال درست کنید که خروجی دستور رو به کاربر نشون بده؟ مثلاً شبیه PyGlossary
3- آیا می‌خواید ورودی هم از کاربر بگیره؟
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 15 تیر 1388، 03:26 ب‌ظ
اول سلام
می خوام توی زبان c باشه
در ضمن می خوام با کلیک کردن بروی یک button رمز کاربر root رو سوال کنه سپس این رمز به ترمینال بده تا بتونه دستورات زیر اجرا بشه
cd /media/cdrom0/packages

sudo dpkg -i /media/cdrom0/packages/ssl-cert_1.0.14-0ubuntu2.1_all.deb
sudo dpkg -i /media/cdrom0/packages/openssl-blacklist_0.3.3+0.4-0ubuntu0.8.04.3_all.deb
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: فاراب در 15 تیر 1388، 03:48 ب‌ظ
اول سلام
می خوام توی زبان c باشه
در ضمن می خوام با کلیک کردن بروی یک button رمز کاربر root رو سوال کنه سپس این رمز به ترمینال بده تا بتونه دستورات زیر اجرا بشه
cd /media/cdrom0/packages

sudo dpkg -i /media/cdrom0/packages/ssl-cert_1.0.14-0ubuntu2.1_all.deb
sudo dpkg -i /media/cdrom0/packages/openssl-blacklist_0.3.3+0.4-0ubuntu0.8.04.3_all.deb


اینکار بوسیله‌ی تابع zenity در اسکریپت برای gtk انجام میشه. برای مثال:
zenity --entry --title="محل قرارگیری فایل" --text="آدرس فایل:" --entry-text="http://www."

نمونه‌اش هم اینجا هست:
http://forum.ubuntu.ir/index.php/topic,9794.0.html

برای اطلاع از چگونگی کارکردش، دستور به راهنما مراجعه کنید:
man zenity

اگر نتونستید اسکریپتش رُ بنویسید، بفرمایید تا کد رُ براتون بنویسم.
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 15 تیر 1388، 11:20 ب‌ظ
آقای فاراب سلام و تشکر از راهنماییتان
 لطفا به ایمیلتان سر بزنید
 
دستوری که گفته بودید برای ظاهر گرافیکی مورد نظر من مناسب نیست
 در ایمیلتان فایل اجرایی وفایل کد نویسی را گذاشته ام
منظور من این است که زمانی که بروی button-tavasol کلیک می کند یا برنامه sh.* اجرا شود ویا این دستور
( sudo dpkg -i /media/cdrom0/packages/linux-libc-dev_2.6.24-18.32_i386.deb)
اجرا شود وفایل اجرایی کل برنامه ساده باشد مثل فایل signal.out
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم&#
ارسال شده توسط: مهدی2 در 18 تیر 1388، 05:12 ق‌ظ
همه کاربران  سلام
به از جستجوهای فراوان در اینترنت توانستم چند خط کد زیر را پیدا کنم .

        FILE *fp;
        gint exit_status;

        gchar *command = "???";

        /* execute command */
        fp = popen(command, "r");
    if (fp == NULL)
    {
                g_print("Error running %s", command);
    }
        exit_status = pclose (fp);
        g_print("Script exited with status %d", exit_status);

از این کد بیشتر برای سیگنال استفاده می شد.  در این کد بجای علامت سوال آدرس کامل فایل قرار میگیرد بطور مثال این آدرس
home/m/Desktop/xx.deb



حالا سوال دوم
با استفاده از رابط گرافیکی زیر چگونه میتوان رمز کاربر root گرفت وبه ترمینال داد(چگونه میتوان بارابط گرافیکی زیر وارد کاربر روت شد

http://upload.iranblog.com/6/1247180850.gif
عنوان: پاسخ به: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم&#
ارسال شده توسط: سعید رسولی در 18 تیر 1388، 02:52 ب‌ظ
همه کاربران  سلام
به از جستجوهای فراوان در اینترنت توانستم چند خط کد زیر را پیدا کنم .

        FILE *fp;
        gint exit_status;

        gchar *command = "???";

        /* execute command */
        fp = popen(command, "r");
    if (fp == NULL)
    {
                g_print("Error running %s", command);
    }
        exit_status = pclose (fp);
        g_print("Script exited with status %d", exit_status);

از این کد بیشتر برای سیگنال استفاده می شد.  در این کد بجای علامت سوال آدرس کامل فایل قرار میگیرد بطور مثال این آدرس
home/m/Desktop/xx.deb



حالا سوال دوم
با استفاده از رابط گرافیکی زیر چگونه میتوان رمز کاربر root گرفت وبه ترمینال داد(چگونه میتوان بارابط گرافیکی زیر وارد کاربر روت شد

http://upload.iranblog.com/6/1247180850.gif

بجای تابع popen از تابع system هم می‌تونید استفاده کنید.
برای انجام یه دستور با حساب root هم می‌تونید از gksu استفاده کنید.(اول همون دستور gksu و یه فاصله بذارید)
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: فاراب در 18 تیر 1388، 03:24 ب‌ظ
همه کاربران  سلام
به از جستجوهای فراوان در اینترنت توانستم چند خط کد زیر را پیدا کنم .

        FILE *fp;
        gint exit_status;

        gchar *command = "???";

        /* execute command */
        fp = popen(command, "r");
    if (fp == NULL)
    {
                g_print("Error running %s", command);
    }
        exit_status = pclose (fp);
        g_print("Script exited with status %d", exit_status);

از این کد بیشتر برای سیگنال استفاده می شد.  در این کد بجای علامت سوال آدرس کامل فایل قرار میگیرد بطور مثال این آدرس
home/m/Desktop/xx.deb



حالا سوال دوم
با استفاده از رابط گرافیکی زیر چگونه میتوان رمز کاربر root گرفت وبه ترمینال داد(چگونه میتوان بارابط گرافیکی زیر وارد کاربر روت شد

http://upload.iranblog.com/6/1247180850.gif


خود دستور gksu اینکار رُ انجام میده. اگه هم خواستی میتونی اون تابع zenity که مقدار از کاربر میگیره رُ توی یه متغییر بریزی و با رمز عبور مقایسه کنی.
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم&#
ارسال شده توسط: مهدی2 در 23 تیر 1388، 06:54 ق‌ظ
سلام
تشکر می کنم ازاین که پاسخ دادید
متاسفانه مشکل من با این کارها حل نشد
من می خوام یک پنجره که رمز عبور کاربر root رو بگیره و وارد کاربر روت بشه البته با ظاهر گرافیکی زیر
http://upload.iranblog.com/6/1247180850.gif
من ظاهر گرافیکی رو ساختم فقط مشکلم اینه که(به زبان ساده بگویم) چه کدی بنویسم که ابتدا عبارت  sudo -s -H تایپ کرد کلید اینتر را بزند ودر مقابل عبارت password عبارت تایپ شده در پنجره ( http://upload.iranblog.com/6/1247180850.gif ) قرار داده واینتر را بزند
البته عبارات زیر را در راهنماهای gtk که با بسته ی libgtk*doc نصب شده پیدا کردم ولی نمی دانم چطور باید استفاده کرد



   gnome_password_dialog_get_type (void);
GtkWidget* gnome_password_dialog_new      (const char *dialog_title,
   const char *message,
   const char *username,
   const char *password,
   gboolean    readonly_username);

gboolean   gnome_password_dialog_run_and_block           (GnomePasswordDialog *password_dialog);

/* Attribute mutators */
void gnome_password_dialog_set_show_username       (GnomePasswordDialog *password_dialog,
    gboolean             show);
void gnome_password_dialog_set_show_domain         (GnomePasswordDialog *password_dialog,
    gboolean             show);
void gnome_password_dialog_set_show_password       (GnomePasswordDialog *password_dialog,
    gboolean             show);
void gnome_password_dialog_set_username            (GnomePasswordDialog *password_dialog,
    const char          *username);
void gnome_password_dialog_set_domain              (GnomePasswordDialog *password_dialog,
    const char          *domain);
void gnome_password_dialog_set_password            (GnomePasswordDialog *password_dialog,
    const char          *password);
void gnome_password_dialog_set_readonly_username   (GnomePasswordDialog *password_dialog,
    gboolean             readonly);
void gnome_password_dialog_set_readonly_domain     (GnomePasswordDialog *password_dialog,
    gboolean             readonly);

void                        gnome_password_dialog_set_show_remember (GnomePasswordDialog         *password_dialog,
     gboolean                     show_remember);
void                        gnome_password_dialog_set_remember      (GnomePasswordDialog         *password_dialog,
     GnomePasswordDialogRemember  remember);
GnomePasswordDialogRemember gnome_password_dialog_get_remember      (GnomePasswordDialog         *password_dialog);
void                        gnome_password_dialog_set_show_userpass_buttons (GnomePasswordDialog         *password_dialog,
                                                                           gboolean                     show_userpass_buttons);

/* Attribute accessors */
char *     gnome_password_dialog_get_username            (GnomePasswordDialog *password_dialog);
char *     gnome_password_dialog_get_domain              (GnomePasswordDialog *password_dialog);
char *     gnome_password_dialog_get_password            (GnomePasswordDialog *password_dialog);

gboolean   gnome_password_dialog_anon_selected (GnomePasswordDialog *password_dialog);

وهمچنین
void e_passwords_init (void);

void        e_passwords_shutdown          (void);
void     e_passwords_cancel(void);
void        e_passwords_set_online(int state);
void        e_passwords_remember_password (const char *component, const char *key);
void        e_passwords_add_password      (const char *key, const char *passwd);
char       *e_passwords_get_password      (const char *component, const char *key);
void        e_passwords_forget_password   (const char *component, const char *key);
void        e_passwords_forget_passwords  (void);
void        e_passwords_clear_passwords (const char *component);

و در این صفحات یک مثال وجود دارد
http://gobby.0x539.de/trac/browser/src/passworddialog.cpp?rev=538eb0791fff0fe096872a736ce883fafcf485b3

http://www.tinymail.org/trac/tinymail/browser/trunk/libtinymailui-gtk/tny-gtk-password-dialog.c?rev=2825

عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 28 تیر 1388، 05:33 ق‌ظ
دوستان سلام
کسی نیست جواب بده . کل کارم برای این دستور ایستاده لطفا هر نوع اطلاعاتی دارید بگید
سوالم اینطور حداقل می کنم که چطور دستورات
gnome_password_dialog_get_password (GnomePasswordDialog *password_dialog);  و
e_passwords_get_password      (const char *component, const char *key);
دریک برنامه gtk استفاده می شود.


عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 14 امرداد 1388، 06:39 ق‌ظ
سلام
دوستان من که دیگر از این این انجمن تاحدودی  نامید شدم javascript:void(0);
حداقل بگوید برنامه های مانند  Synaptic چگونه وارد کاربر روت می شوند javascript:void(0);
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 23 امرداد 1388، 07:50 ق‌ظ
دوستان سلام
شکر خدا تونستم با زیر ورو کردن gtk  مشکل رو برطرف کنم
جواب سوال این میشه که اگر بخواهیم با یک رابط گرافیکی  وارد کاربر روت شویم ویک فایل را با روت اجرا کنیم کافی است در ترمینال در ابتدای آدرس  فایل عبارت gksu را تایپ کنیم بطور مثال :
gksu  -- /home/m/Desktop/tavasol.sh

حالا سوالی دیگر دارم امید وارم بتوانید کمک کنید
من می خواهم یک ProgressBar ایجاد کنم که فقط نشانگر آن حرکت رفت و برگشت داشته با شد و با آغاز عملیات نصب شروع شود و با پایان نصب بسته شود
در زیر یک عکس گذاشتم شبیه اون چیزی که می خوام فقط عکس رو با مرور گر اینترنت باز کنید

http://www.Free-Picture-Host.com/images/vI8Wsz1250219992.gif
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: سعید رسولی در 23 امرداد 1388، 09:17 ق‌ظ
حالا سوالی دیگر دارم امید وارم بتوانید کمک کنید
من می خواهم یک ProgressBar ایجاد کنم که فقط نشانگر آن حرکت رفت و برگشت داشته با شد و با آغاز عملیات نصب شروع شود و با پایان نصب بسته شود
در زیر یک عکس گذاشتم شبیه اون چیزی که می خوام فقط عکس رو با مرور گر اینترنت باز کنید

http://www.Free-Picture-Host.com/images/vI8Wsz1250219992.gif
باید با تابع gtk_progress_bar_pulse کار کنید. فعلاً یه چیزی نوشتم که کار می‌کنه. ولی روی زمان‌بندیش باید کار کنید(من همینطوری سمبل کردم! کلی پروسه می‌گیره). فکر می‌کنم باید از timeout_signal که توی glib هست استفاده کنید. در ضمن باید مثلاً با فشردن یه دکمه‌ای چیزی هم اون پنجره نشون داده بشه هم اینکه اون حلقه(که پالس می‌فرسته) شروع بشه. ولی من همینطوری قبل از gtk_main نوشتم‌ش.
// gcc `pkg-config --cflags --libs gtk+-2.0` progress.c -o progress
#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
//#include <time.h>


gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){
    exit(0);
    //gtk_main_quit();
    return 1;
}


int main(int argc , char **argv){
  gtk_init(&argc, &argv);
  int i=0;
  GtkWidget *pbar, *win;
  pbar=gtk_progress_bar_new();
  win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  g_signal_connect(G_OBJECT(win), "delete_event", G_CALLBACK(delete_event), NULL);
  gtk_container_add(GTK_CONTAINER(win), pbar);
  gtk_widget_show_all(win);
  for(i=0;;i++){
    if(i%10000==0)
      gtk_progress_bar_pulse(GTK_PROGRESS_BAR(pbar));
    while(gtk_events_pending())
      gtk_main_iteration_do(0);
    //sleep(1);
    //printf("%d\n", i);
  }
  gtk_main();
  return 0;
}
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 24 امرداد 1388، 05:53 ق‌ظ
همه دوستان سلام
آقای ilius برنامه شما را امتحان کردم و متاسفانه برای تازکاری مثل من تغییر دادنش خیلی سخت است
برای ساخت پنجره مورد نظر از قسمت p..bar عکس گرفتم و این عکس را  به همراه label  در یک پنجره قرار دادم
حالا مشکل من این است که چگونه می توان فقط این پنجره وقتی که دستور قبلی اجرا شد بسته شود
 البته دستور gtk _mine_quit این کار را انجام می دهد ولی تمام پنجره های می بندد در صورتی که من می خواهم فقط یک پنجره بسته شود

void b23(GtkWidget *widget,gpointer data)
{
FILE *fp;
        gint exit_status;
        gchar *command = "gksu -- /home/m/Desktop/cd-tavasol/sh/opera.sh";

        fp = popen(command, "r");
    if (fp == NULL)
    {
                g_print("Error running %s", command);
    }
        exit_status = pclose (fp);
  gtk_main_quit();  
}
 


عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 28 امرداد 1388، 03:37 ب‌ظ
سلام
کسی نبود به من کمک کنه
سوالم این هست که می خوام وقتی توی کنسول تایپ شد(finish) سیگنالی ایجاد شود( که بتوانم برای کالبک آن دستور بسته شدن پنجره بنویسم)
FILE *fp;
        gint exit_status;
        gchar *command = "gksu -- /home/m/Desktop/cd-tavasol/sh/tavasol8.04LTS.sh";

        fp = popen(command, "r");
    if (fp == NULL)
    {
                g_print("Error running %s", command);
    }
        exit_status = pclose (fp);
        g_print("finish", exit_status);
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 30 امرداد 1388، 08:55 ق‌ظ
سلام
کسی نبود به من کمک کنه
سوالم این هست که می خوام وقتی توی کنسول تایپ شد(finish) سیگنالی ایجاد شود( که بتوانم برای کالبک آن دستور بسته شدن پنجره بنویسم)
FILE *fp;
        gint exit_status;
        gchar *command = "gksu -- /home/m/Desktop/cd-tavasol/sh/tavasol8.04LTS.sh";

        fp = popen(command, "r");
    if (fp == NULL)
    {
                g_print("Error running %s", command);
    }
        exit_status = pclose (fp);
        g_print("finish", exit_status);
شکر خداوند مهربان تونستم کد مورد نیازم رو بنویسم
         read ("fin");
if ( "fin" )
{
    g_print("ok");
}
در داخل کد به جای fin عبارتی که در کنسول تایپ می شود را بنویسید
وبه جای g_print("ok"); عملیلاتی که می خواهید انجام شود را تایپ کنید
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 12 آذر 1388، 08:07 ق‌ظ
سلام
من برنامه نصب گرافیکی نرم افزار را بصورت زیر نوشتم و آن را با gcc کامپایل کردم
اما مشکل این است که وقتی button کلیک می شود و برنامه هم نصب می شود ولی در بعضی موارد اگر بعد از انجام نصب دستور
sudo dpkg --configure -a
در ترمینال اجرا شود بعضی از برنامه seting up می شود (بخصوص در مواردی که برنامه libc6 نصب شود )



#include <gtk/gtk.h>
gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
{
gtk_main_quit();
return FALSE;
}

void kkk(GtkWidget *widget,gpointer data)
{
FILE *fp;
        gint exit_status;
        gchar *command = "gksu -- ";

        /* execute command */
        fp = popen(command, "r");
    if (fp == NULL)
    {
                g_print("Error running %s", command);
    }
        exit_status = pclose (fp);
        g_print("Script exited with status %d", exit_status);
}

int main(int argc , char *argv[])
{
gtk_init(&argc,&argv);
/*bفهرست اشیا*/
GtkWidget *window;
GtkWidget *button1;
/*bسفارشی کردن اشیا*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
button1= gtk_button_new_with_label ("tavasol");
gtk_container_add(GTK_CONTAINER(window),button1);
gtk_window_set_title(GTK_WINDOW(window),"WELCOME TO GTK+");
gtk_widget_set_size_request(GTK_WIDGET(window),450,250);
gtk_window_set_resizable(GTK_WINDOW(window),FALSE);

/*bسیگنال بسته شدن*/
g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(delete_event),NULL);
/*bسیگنال کلیک*/
g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(kkk),NULL);
/*bنمایش اشیا*/
gtk_widget_show(window);
gtk_widget_show(button1);

gtk_main();
return 0;
}
عنوان: پاسخ به: چگونه اسکریپت ها شل را در gtk اجرا کنیم؟ (how run scripts shell in gtk)
ارسال شده توسط: مهدی2 در 05 اسفند 1388، 08:18 ب‌ظ
سلام به خودم
#include <gtk/gtk.h>
#include <stdlib.h>

gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
{
gtk_main_quit();
return FALSE;
}

void kkk(GtkWidget *widget,gpointer data)
{
   int x=system("cd ~/Desktop;gksu -- sudo dpkg -i /home/m/Desktop/cdd/packages/amir05_beta_i386.deb"); //**
   return 0;
}

int main(int argc , char *argv[])
{
gtk_init(&argc,&argv);
/*bفهرست اشیا*/
GtkWidget *window;
GtkWidget *button1;
/*bسفارشی کردن اشیا*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
button1= gtk_button_new_with_label ("tavasol");
gtk_container_add(GTK_CONTAINER(window),button1);
gtk_window_set_title(GTK_WINDOW(window),"WELCOME TO GTK+");
gtk_widget_set_size_request(GTK_WIDGET(window),450,250);
gtk_window_set_resizable(GTK_WINDOW(window),FALSE);

/*bسیگنال بسته شدن*/
g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(delete_event),NULL);
/*bسیگنال کلیک*/
g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(kkk),NULL);
/*bنمایش اشیا*/
gtk_widget_show(window);
gtk_widget_show(button1);

gtk_main();
return 0;
}