ইউনিটির জন্য সিস্টেম সূচক কীভাবে বিকাশ করা যায়?


38

এটি কীভাবে ইউনিটি সূচক তৈরি করবেন তার সদৃশ নয় ? । আমি সিস্টেম সূচকটি খুঁজছি যা অ্যাপ্লিকেশন সূচক নয়।

Backgound:

এই দুটি প্রশ্ন থেকে:

আমি শিখেছি যে দুটি ধরণের সূচক রয়েছে:

  • সিস্টেম: শব্দ, কীবোর্ড, অ্যাপ্লিকেশন, ... (চেষ্টা করুন ps ax | grep indicator)
  • অ্যাপ্লিকেশন: এনএম-অ্যাপলেট, সিজনমিটার, ... এবং প্রায় সমস্ত কি অ্যাপ্লিকেশন সূচকগুলিতে তালিকাভুক্ত রয়েছে ?

সমস্ত অ্যাপ্লিকেশন সূচকগুলি নির্দেশক-প্রয়োগ (একটি সিস্টেমের) দ্বারা পরিচালিত / দেখানো হয়। সিস্টেম সূচকগুলি সরাসরি ইউনিটি প্যানেল দ্বারা প্রদর্শিত হয়।

উভয় প্রশ্ন লগইন এবং লক স্ক্রীন থেকে সূচকগুলি যুক্ত / সরানোর বিষয়ে। প্রথমটি ছিল স্ট্রেট ফরোয়ার্ড সেটআপ (সিস্টেম সূচকগুলির সাথে কাজ করার সময়)। দ্বিতীয়টি ছিল একটি শক্ত সেটআপ (অ্যাপ্লিকেশন সূচকগুলির সাথে কাজ করার সময়), যার জন্য লক স্ক্রিনের জন্য প্যানেল পরিষেবার উত্স (unityক্য প্যাকেজ) এবং লগইন স্ক্রিনের জন্য unityক্য-গ্রিটারের উত্সটি সংশোধন করা দরকার।

ঘটনা হিসাবে sysmonitor, আমার কাছে যে কাজ ছিল। সর্বোত্তম সমাধান হ'ল কোনও অ্যাপ্লিকেশনটির পরিবর্তে সিস্টেম সূচক কার্যকর করা।

বিষয়:

  • সিস্টেম সূচকগুলির জন্য কি একীভূত এপিআই রয়েছে (পছন্দসই: পাইথন তখন সি / সি ++)? দয়া করে অফিসিয়াল ডকুমেন্টেশনের রেফারেন্স দিন।

  • বেশিরভাগ সিস্টেম সূচকগুলি ভালা প্রোগ্রামিং ভাষা ব্যবহার করে লেখা হয়। পাইথন বা সি ব্যবহার করে কেউ কি সিস্টেম সূচকের জন্য ছোট ডেমো লিখতে পারে?

হালনাগাদ:

আমি কয়েকটি লিঙ্ক পেয়েছি যা একটি ধাক্কা দিতে পারে:

  • ইন অ্যাপ্লিকেশন সূচক প্রকল্পের পাতা, তারা AppIndicator-0.3 এপিআই (লিঙ্ক তালিকাবদ্ধ সি & পাইথন ) আবেদন সূচক জন্য ব্যবহৃত।

    তারা ইন্ডিকেট-0.7 এপিআই ( সিপাইথন ) তালিকাভুক্ত করেছে । এটা কি? ঠিক আছে, এটি ডেস্কটপ অ্যাপ্লিকেশনগুলির মধ্যে একটি ডিবাস মেসেজিং চ্যানেল।

  • অন্যদিকে, সিস্টেম সূচক প্রকল্প পৃষ্ঠায় তারা উল্লেখ করেছে:

    সিস্টেম সূচক এপিআই

    • মেসেজিং মেনু লাইবাইন্ডিকেট ব্যবহার করে।
    • স্বাধীনতা ব্যবহার করে সাউন্ড মেনু।
    • বিবর্তন-ডেটা-সার্ভার ব্যবহার করে তারিখ / সময় সূচক

    এগুলি ডেভেল এপিআই তালিকাভুক্ত বলে মনে হচ্ছে বিবর্তন-ডেটা-সার্ভারের মতো সূচক বিকাশ এপিআই নয়। তবে স্বাধীনতা ও স্বাধীনতা সম্পর্কে নিশ্চিত নন। এই দুটি গ্রন্থাগার নিয়ে কেউ কাজ করেছে?

    apt-cache rdepends libunity9 libindicator7 libindicator3-7কোন সূচক এই লাইব্রেরিগুলি রিলে করছে তা দেখার চেষ্টা করুন ।

Update2: এই আগ্রহী ব্যবহারকারীদের আপডেট রাখতে।

আমি এখন অবধি যা সংগ্রহ করেছি, তা এখানে সম্ভাব্য সমাধানের ক্রম:

  1. libindicator3-7 (উচ্চ, অনেক সূচক এটির উপর নির্ভর করে)

    আমি উত্সটিতে কয়েকটি পরীক্ষার উদাহরণ পেয়েছি, কিছু ডামি সূচক যা আমি চেষ্টা করেছি, ইনস্টল করা যেতে পারে /usr/lib/indicators3/7/, সেগুলি ভাগ করে দেওয়া হয়েছে .so। আমি এগুলিকে লগইন এবং নিয়মিত সেশনে প্রদর্শিত করতে পারি তবে লক স্ক্রিনে নয়।

    তবে কিছু পরীক্ষা সূচক পরিষেবা রয়েছে, যা ইউনিটি সিস্টেমের মতো মনে হয়। আমি এখনও তাদের চেষ্টা করিনি।

  2. libindicator7

    রিডিন্ডেন্ডস থেকে একই উত্স থেকে libindicator3-7 হিসাবে:

    mate-indicator-applet
    lxpanel-indicator-applet-plugin

    এটি প্যানেলগুলিতে সূচকগুলির জন্য ধারক তৈরি করতে ব্যবহৃত হয়েছিল বলে মনে হয়।

  3. libunity9 (কম)

    এখনও কোন গবেষণা

উত্তর:


12

সিস্টেম সূচক পরিষেবা

হ্যাঁ, আমি প্রত্যাশিত তখন এটি সত্যিই সহজ। এটির জন্য কোনও নির্দিষ্ট এপিআই নেই। কারণ এটি কেবল একটি জিএসিম্পলএ্যাকশনগ্রুপ এবং ডিবিবাসের মাধ্যমে সংশ্লিষ্ট জিমনুর রফতানির সাথে thenক্যটিকে ডিক্লারেশন ফাইল ব্যবহার করে একই উপস্থিতিতে তাদের উপস্থিতি সম্পর্কে বলা হয় /usr/share/unity/indicators/। অন্য কোনও গ্রন্থাগারের দরকার নেই।

এখানে খুব ছোট সি ভাষার উদাহরণ:

  1. উত্স tests/indicator-test-service.cথেকে একটি অনুলিপি পেতেlibindicator

    apt-get source libindicator
    cp libindicator-*/tests/indicator-test-service.c .
    cp libindicator-*/tests/com.canonical.indicator.test* .
    • সূচক-পরীক্ষা-পরিষেবা.সি পরিবর্তন নেই

      #include <gio/gio.h>
      
      typedef struct
      {
        GSimpleActionGroup *actions;
        GMenu *menu;
      
        guint actions_export_id;
        guint menu_export_id;
      } IndicatorTestService;
      
      static void
      bus_acquired (GDBusConnection *connection,
                    const gchar     *name,
                    gpointer         user_data)
      {
        IndicatorTestService *indicator = user_data;
        GError *error = NULL;
      
        indicator->actions_export_id = g_dbus_connection_export_action_group (connection,
                                                                              "/com/canonical/indicator/test",
                                                                              G_ACTION_GROUP (indicator->actions),
                                                                              &error);
        if (indicator->actions_export_id == 0)
          {
            g_warning ("cannot export action group: %s", error->message);
            g_error_free (error);
            return;
          }
      
        indicator->menu_export_id = g_dbus_connection_export_menu_model (connection,
                                                                         "/com/canonical/indicator/test/desktop",
                                                                         G_MENU_MODEL (indicator->menu),
                                                                         &error);
        if (indicator->menu_export_id == 0)
          {
            g_warning ("cannot export menu: %s", error->message);
            g_error_free (error);
            return;
          }
      }
      
      static void
      name_lost (GDBusConnection *connection,
                 const gchar     *name,
                 gpointer         user_data)
      {
        IndicatorTestService *indicator = user_data;
      
        if (indicator->actions_export_id)
          g_dbus_connection_unexport_action_group (connection, indicator->actions_export_id);
      
        if (indicator->menu_export_id)
          g_dbus_connection_unexport_menu_model (connection, indicator->menu_export_id);
      }
      
      static void
      activate_show (GSimpleAction *action,
                     GVariant      *parameter,
                     gpointer       user_data)
      {
        g_message ("showing");
      }
      
      int
      main (int argc, char **argv)
      {
        IndicatorTestService indicator = { 0 };
        GMenuItem *item;
        GMenu *submenu;
        GActionEntry entries[] = {
          { "_header", NULL, NULL, "{'label': <'Test'>,"
                                   " 'icon': <'indicator-test'>,"
                                   " 'accessible-desc': <'Test indicator'> }", NULL },
          { "show", activate_show, NULL, NULL, NULL }
        };
        GMainLoop *loop;
      
        indicator.actions = g_simple_action_group_new ();
        g_simple_action_group_add_entries (indicator.actions, entries, G_N_ELEMENTS (entries), NULL);
      
        submenu = g_menu_new ();
        g_menu_append (submenu, "Show", "indicator.show");
        item = g_menu_item_new (NULL, "indicator._header");
        g_menu_item_set_attribute (item, "x-canonical-type", "s", "com.canonical.indicator.root");
        g_menu_item_set_submenu (item, G_MENU_MODEL (submenu));
        indicator.menu = g_menu_new ();
        g_menu_append_item (indicator.menu, item);
      
        g_bus_own_name (G_BUS_TYPE_SESSION,
                        "com.canonical.indicator.test",
                        G_BUS_NAME_OWNER_FLAGS_NONE,
                        bus_acquired,
                        NULL,
                        name_lost,
                        &indicator,
                        NULL);
      
        loop = g_main_loop_new (NULL, FALSE);
        g_main_loop_run (loop);
      
        g_object_unref (submenu);
        g_object_unref (item);
        g_object_unref (indicator.actions);
        g_object_unref (indicator.menu);
        g_object_unref (loop);
      
        return 0;
      }
    • com.canonical.indicator.test লক এবং গ্রিটার মোড যুক্ত করতে সংশোধিত

      [Indicator Service]
      Name=indicator-test
      ObjectPath=/com/canonical/indicator/test
      
      [desktop]
      ObjectPath=/com/canonical/indicator/test/desktop
      
      [desktop_greeter]
      ObjectPath=/com/canonical/indicator/test/desktop
      
      [desktop_lockscreen]
      ObjectPath=/com/canonical/indicator/test/desktop
    • com.canonical.indicator.test.service ফাইলনাম থেকে .inপোস্টফিক্স সরান এবং সম্পাদনযোগ্য পথ পরিবর্তন করুন

      [D-BUS Service]
      Name=com.canonical.indicator.test
      Exec=/usr/lib/x86_64-linux-gnu/indicator-test/indicator-test-service
  2. এটি সংকলন

    gcc -o indicator-test-service indicator-test-service.c `pkg-config --cflags --libs gtk+-3.0`
  3. ম্যানুয়াল ইনস্টলেশন

    sudo su
    mkdir /usr/lib/x86_64-linux-gnu/indicator-test/
    cp indicator-test-service /usr/lib/x86_64-linux-gnu/indicator-test/
    cp com.canonical.indicator.test /usr/share/unity/indicators/
    cp com.canonical.indicator.test.service /usr/share/dbus-1/services/
  4. গ্রেটারের জন্য কনফিগারেশন, ডিফল্ট সূচকগুলির তালিকাটি ওভাররাইড করে

    • 90_unity-greeter.gschema.override

      [com.canonical.unity-greeter]
      indicators=['ug-accessibility', 'com.canonical.indicator.keyboard', 'com.canonical.indicator.session', 'com.canonical.indicator.datetime', 'com.canonical.indicator.power', 'com.canonical.indicator.sound', 'com.canonical.indicator.test', 'application']
    • ইনস্টল করুন

      cp 90_unity-greeter.gschema.override /usr/share/glib-2.0/schemas/
      glib-compile-schemas /usr/share/glib-2.0/schemas/
  5. পরীক্ষা

    sudo service lightdm restart

নোট

  • ডিবিবাস পরিষেবাটি সমস্যাজনক, যদি আপনি চান ব্যবহারকারী কোনও সময় অ্যাপ্লিকেশনটি বন্ধ করতে সক্ষম হন। পরিবর্তে অটোস্টার্ট ব্যবহার করা ভাল, ডিফল্ট সূচকগুলির মতো।

  • আমি প্রস্তুত ফাইলগুলি এখানে আপলোড করেছি:

    https://github.com/sneetsher/mysystemindicator_minimum

    এবং একটি পরিবর্তিত অনুলিপি এখানে:

    https://github.com/sneetsher/mysystemindicator

    যেখানে আমি বিভিন্ন মোডের জন্য বিভিন্ন মেনু চেষ্টা করেছি। এটি ইনস্টল এবং দ্রুত পরীক্ষা করা যেতে পারে।

  • এটি খুব সহজ বলে মনে হচ্ছে এবং জিআইও জিনোম লাইব (ডিবিএস সহ) সমর্থন করে এমন কোনও অন্য ভাষায় সহজেই পোর্ট করা যায়। যেহেতু আমি অজগরটি খুঁজছি, আমি এটি পরে যুক্ত করতে পারি।

তথ্যসূত্র:


সিস্টেম সূচক প্লাগইন

এটি উপরের মত পুরো স্ট্যান্ডেলোন ইন্ডিকেটর নয়, এটি libappmenu.so& র libprintersmenu.so(অ্যাপ্লিকেশন মেনু এবং প্রিন্টার সূচক) এর অনুরূপ একটি শেয়ার লিব প্লাগইন । এটি কেবল নিয়মিত ব্যবহারকারীর সেশন এবং গ্রিটারে (লক স্ক্রিনে নয়) প্রদর্শিত হতে পারে।

আমি এটি আমার বর্তমান মেশিনে কাজ করতে পারি না, তবে আমি আগে করেছি। এখানে পদক্ষেপগুলি হতে পারে আমি কিছু মিস করছি।

  1. উপরের একই উত্স ব্যবহার করা libindicator

    test/libdummy-indicator-*.c উদাহরণ (সরল ও দৃশ্যমান যা প্যানেলে প্রদর্শিত হয়)

  2. কম্পাইল

    ./autogen.sh
    make
  3. ইনস্টল করুন

    sudo cp tests/.libs/libdummy-indicator-visible.so /usr/lib/indicators3/7/libdummy.so
  4. গ্রিটার স্ক্রিনে প্রদর্শনের জন্য কনফিগার করুন

    • 90_une-greeter.gschema.overridelib উপসর্গ এবং .soএক্সটেনশন ছাড়াই একই নাম ব্যবহার করুন ।

      [com.canonical.unity-greeter]
      indicators=['ug-accessibility', 'com.canonical.indicator.keyboard', 'com.canonical.indicator.session', 'com.canonical.indicator.datetime', 'com.canonical.indicator.power', 'com.canonical.indicator.sound', 'application', 'dummy']
    • ইনস্টল করুন

      cp 90_unity-greeter.gschema.override /usr/share/glib-2.0/schemas/
      glib-compile-schemas /usr/share/glib-2.0/schemas/

2
আমি ভাবছি যদি পাইথনে এটি করা যেত .. সি কিছুটা ভীতিজনক দেখাচ্ছে।
শেঠ

@ তবে আমি বিশ্বাস করি যে হ্যাঁ এটি পাইথনে তৈরি করা যেতে পারে। যেহেতু আমি সবেমাত্র সমস্ত প্রয়োজনীয় ফাংশন ( export_action_group, export_menu_model) এবং অবজেক্টস ( SimpleActionGroup, Menu) এ যাচাই করেছি gi.repository.Gio। আমি কয়েকদিনে একটি লেখার চেষ্টা করব।
user.dz

0

দ্রষ্টব্য: এই উত্তরটি চূড়ান্ত বলার জন্য দয়া করে এই পোস্টের নীচে চেক করুন।

আমি সত্যিই কোনও সহায়তার জন্য কিনা জানি না তবে আমি আশা করি এই ধারণাটি কার্যকর হতে পারে useful

আমি যা অনুসন্ধান করেছি তা থেকে সিস্টেম এবং অ্যাপ্লিকেশন সূচকগুলির মধ্যে পার্থক্য আলাদা। এটি মাথায় রেখে, আমি এখন একটি প্রশ্নবিদ্ধ ধারণা প্রবর্তন করছি:

সিস্টেম ইনডিকেটরে অ্যাপ্লিকেশন ইন্ডিকেটর এপিআই ব্যবহার (একই উদ্দেশ্যে একটি নতুন, ইউনিফাইড এপিআই তৈরি করার বিরোধিতা করে)

নিম্নলিখিত পোস্টগুলি দেখার সময় আমার কাছে ধারণাটি এসেছিল:

https://askubuntu.com/a/234204/408654

https://askubuntu.com/a/42213/408654

ইউনিটি এপিআই প্রাথমিকভাবে অ্যাপ্লিকেশন সূচকগুলির সাথে ব্যবহারের জন্য নির্মিত বলে মনে হয়, তবে সিস্টেম এবং অ্যাপ্লিকেশন সূচক উভয়ই অনুরূপ প্রোগ্রামিং (সি ল্যাং) ব্যবহার করতে পারে। তবে, আপনি আগে উল্লেখ করেছিলেন যে এই দুটি ধরণের সূচক দুটি পৃথক সিস্টেম দ্বারা পরিচালিত হয়। এর মতো, আমি তখন আপনার উত্সগুলির একটি পড়তে এগিয়ে গেলাম:

লগইন স্ক্রিনে আমি কীভাবে অ্যাপ্লিকেশন / সিস্টেম সূচকগুলি যুক্ত বা পরিচালনা করতে পারি?

ইতিমধ্যে বিদ্যমান ব্যবহারকারীর প্রয়োজনীয় অ্যাক্সেস অর্জনের জন্য প্রাথমিক উত্তরটি এতে ওভাররাইড জড়িত। এটি বিদ্যমান বিদ্যমান সূচকগুলি যুক্ত এবং অপসারণের জন্য একটি সমাধানও সরবরাহ করেছিল। এটি সূচকগুলির জন্য একীভূত পরিচালনার সমাধান। কোনও সিস্টেম সূচক চালনা / পরিচয় করানোর জন্য কোনও পূর্বনির্ধারিত (পূর্ব বিদ্যমান) ব্যবহারকারীকে ওভাররাইড করা সম্ভব হবে কি?

কোনও সিস্টেম ইন্ডিকেটর কি ইউনিটি অ্যাপ্লিকেশন ইন্ডিকেটর এপিআই ব্যবহার করতে পারে (byক্য প্যানেল দ্বারা এপিআইটি সঠিকভাবে প্রদর্শিত এবং প্রদর্শিত হতে পারে)? যদি এর উত্তরগুলি হ্যাঁ হয়, তবে এটি পরিস্থিতিটি তৃপ্ত করবে - যদি এটির ফলে অন্যান্য সমস্যা না ঘটে। আমি জানি যে এটি তাত্ক্ষণিকভাবে কোনও উত্তর বলে মনে হবে না, তাই আমি কী চেষ্টা করেছি তা স্পষ্ট করব - আমি কাজটি ছোট উদ্দেশ্যগুলিতে ভাঙার চেষ্টা করছি। মূল সূচকটি হ'ল অ্যাপ্লিকেশন ইন্ডিকেটর এপিআই সিস্টেম সিস্টেম সূচকগুলি (সিস্টেম সূচকগুলির জন্য পূর্ব-বিদ্যমান, ইউনিফাইড এপিআই হিসাবে) কোডিংয়ের জন্য ব্যবহার করা যেতে পারে কিনা তা সন্ধান করে।

আপনার প্রশ্নের এই অংশের প্রতিক্রিয়া:

"সিস্টেম সূচকগুলির জন্য কি কোনও ইউনিফাইড API আছে"

দুর্ভাগ্যক্রমে, যদিও, সিস্টেম সূচকগুলির জন্য অ্যাপ্লিকেশন সূচক এপিআই ব্যবহার করার কোনও উপায় নেই। এর মতো, আমার সমাধানটি অকার্যকর :(


দুর্ভাগ্যক্রমে না, অ্যাপ্লিকেশন সূচক এপিআই সিস্টেম সূচক তৈরি করতে ব্যবহার করা যায়নি। এটি সূচক-সিসমনিটরের মতোই হবে , এটির জন্য unity ক্য ও unity ক্য-গ্রিটারের সংশোধিত বিল্ডগুলি দরকার।
user.dz

সেক্ষেত্রে, দেখে মনে হচ্ছে একটি নতুন এপিআই প্রয়োজন - এটি কেবলমাত্র সিস্টেম সূচকটির জন্য। এটি যেমন দাঁড়িয়েছে, উবুন্টু থেকে সিস্টেম সূচকটির একাধিক, পৃথক এপিআই রয়েছে। আমি মনে করি আমাদের কাছে তৃতীয় পক্ষের লাইব্রেরি ব্যবহারের বিকল্পটি রয়েছে, যেমন প্রশ্ন পোস্টের শেষে বলা হয়েছে।
টপহ্যাটপ্রডাকশন 115 21'8
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.