জিইউআই ভিত্তিক অ্যাপ্লিকেশন কী পটভূমিতে শেল কমান্ডগুলি কার্যকর করে?


29

আমি উইন্ডোজ থেকে মাত্র 2 দিন আগে উবুন্টুতে 16.04 এ স্থানান্তরিত হয়েছি। আমি যেভাবে ityক্য ডেস্কটপটি কাস্টমাইজ করতে পারি তা পছন্দ করি। আমি কেবল ডেস্কটপ পরিবেশের চেহারা এবং অনুভূতি নিয়ে ঘুরে বেড়াচ্ছি। উইন্ডোজের মতোই, আমিও চাইছিলাম লঞ্চটি পর্দার নীচে থাকুক। গুগলিং-এ, আমি একটি কমান্ড পেয়েছি যা এর মতো হয়:

gsettings set com.canonical.Unity.Launcher launcher-position Bottom

এছাড়াও, কাজটি করার জন্য unityক্য-টুইটক-সরঞ্জাম এবং ডকনফ সম্পাদক রয়েছে। তবে এগুলি জিনিসগুলি সম্পন্ন করার জিইউআই পদ্ধতির।

আমার প্রশ্নগুলি হ'ল:

  • এই জিইউআই-ভিত্তিক অ্যাপ্লিকেশনগুলি কি পটভূমিতে একই কমান্ড চালায়?
  • এই অ্যাপ্লিকেশনগুলির অভ্যন্তরীণ কাজ করার জন্য কীভাবে উঁকি দেওয়া যায়? মানে, বোতামের প্রতিটি ক্লিকে সম্পাদিত কমান্ডগুলি দেখার আসলে কি কোনও উপায় আছে?
  • এই অ্যাপ্লিকেশনগুলি কি পটভূমিতে একটি টার্মিনাল খোলে এবং এই আদেশগুলি কার্যকর করে?

উত্তর এখানে বলে কিভাবে প্রক্রিয়া এর স্ট্যান্ডার্ড ফাইল বর্ণনাকারী জন্য। কিন্তু, আউটপুটটিতে আমি কিছুই পাইনি।

তদুপরি, strace -p pid -o output.txtকমান্ডটি ফাইলটিতে বিশাল পরিমাণ পাঠ্য নিক্ষেপ করে।

সুতরাং, সংক্ষেপে, জিইউআই অ্যাপ্লিকেশনগুলি ব্যবহার করে কমান্ডলাইন থেকে স্টাফগুলি করার মতো কাজ করা হয়?

উত্তর:


35

এই জিইউআই-ভিত্তিক অ্যাপ্লিকেশনগুলি কি পটভূমিতে একই কমান্ড চালায়?

হ্যা এবং না. তারা dconfসেটিংসের ডেটাবেজে লেখেন , তবে তারা এটি করার বিভিন্ন উপায় ব্যবহার করতে পারে। পাইথনে লিখিত প্রোগ্রামগুলি সম্ভবত gi.repository.Gioমডিউলটি ব্যবহার করবে (আমি জানি কারণ এটি আমি অনেক বেশি ব্যবহার করি) বা তারা পরিবর্তে gsettingsকল করে বাহ্যিক কমান্ড হিসাবে ব্যবহার করতে পারে subprocess.Popen(['gsettings','org.some.schema','some-key','value'])এবং এটি মূলত শেল কমান্ড হিসাবে চলবে will এসি প্রোগ্রামটি অনুরূপ কিছু ব্যবহার করবে, সম্ভবত একটি gio.hলাইব্রেরি, বা এটি exec()ফাংশনগুলির পরিবারকে Popenপাইথনের মতোই ব্যবহার করতে পারে । সুতরাং আপনার শিরোনাম প্রশ্নের উত্তর দিতে: "জিইউআই ভিত্তিক অ্যাপ্লিকেশন কী পটভূমিতে শেল কমান্ড কার্যকর করে?" তারা পারে, তবে সম্ভবত এটি প্রয়োজনীয় নয় কারণ অ্যাপটিতে যে ভাষায় লেখা রয়েছে তার জন্য একটি গ্রন্থাগার রয়েছে এবং সম্ভবত একটি নতুন প্রক্রিয়া তৈরির চেয়ে একটি লাইব্রেরি ফাংশনটি ব্যবহার করা কিছুটা দ্রুত হবে।

লাইব্রেরি / মডিউলগুলি দিয়ে এটি কীভাবে সম্পন্ন হয়েছে তার একটি নমুনা দিতে, আমার লঞ্চার তালিকার সূচকটির উত্স কোডটি একবার নির্বিশেষে দেখে নিন। সেখানে আমি Gio.Settingsক্লাসের একটি উদাহরণ তৈরি করতে একটি ফাংশন লিখেছি এবং তারপরে আপনি যে তালিকার তালিকা চান তা নির্ভর করে ইউনিটি লঞ্চারটি সংশোধন করতে এটি ব্যবহার করুন।

এই অ্যাপ্লিকেশনগুলির অভ্যন্তরীণ কাজ করার জন্য কীভাবে উঁকি দেওয়া যায়? মানে, বোতামের প্রতিটি ক্লিকে সম্পাদিত কমান্ডগুলি দেখার আসলে কি কোনও উপায় আছে?

না। আপনি যদি একটি বাটন টিপে বা উইন্ডো উপাদানগুলিতে ক্লিক করার সাথে সাথে সেই অ্যাপ্লিকেশনটির প্রোগ্রামিং ভাষায় কোন আদেশটি জারি করা হয় তা দেখতে চান, তবে এটি সম্ভব নয়। আবেদনের উত্স কোডটি পড়ুন, যদি এটি পাওয়া সম্ভব হয়। dconf watch /কী সেটিংস পরিবর্তন করা হচ্ছে তা দেখতে আপনি ব্যবহার করতে পারেন তবে এটি কীভাবে হয় তা নয়।

প্রযুক্তিগতভাবে, আপনি যদি কোনও ডিবাগার পরিচালনা করতে, মেমরির ঠিকানাগুলি পড়তে এবং কোনও সমাবেশের ভাষা জানেন তবে আপনি জানতে পারবেন যে কোনও অ্যাপ্লিকেশন সিপিইউ এবং মেমরি স্তরে কী করে does এটি সফ্টওয়্যার রিভার্স ইঞ্জিনিয়ারিং হিসাবে পরিচিত এবং সুরক্ষা পেশাদাররা দূষিত সফ্টওয়্যার বিশ্লেষণ করতে এবং বৈধ সফ্টওয়্যারটিতে দুর্বলতাগুলি আবিষ্কার করতে প্রায়শই ব্যবহৃত হয়।

এই অ্যাপ্লিকেশনগুলি কি পটভূমিতে একটি টার্মিনাল খোলে এবং এই আদেশগুলি কার্যকর করে?

না, এখানে কোনও টার্মিনাল সংযুক্ত নেই। অনেক প্রোগ্রাম জানে dconfযে ব্যবহারকারীর জন্য ডাটাবেসটি কোথায় রয়েছে এবং সেখানে লিখুন। এছাড়াও একটি আন্তঃ-প্রক্রিয়া যোগাযোগ বাস নামে পরিচিত dbus, যেখানে প্রোগ্রামগুলি সংকেত প্রেরণ করতে পারে এবং একটি প্রোগ্রাম "হেই, এটি আমার জন্য একটি বার্তা!" এর মতো হবে!

অভিযোজ্য বস্তু

  • অ্যাপ্লিকেশনগুলি কি অন্যান্য অ্যাপ্লিকেশন চালাতে পারে? হ্যাঁ, এটি স্ট্যান্ডার্ড fork()এবং execve()সিস্টেম কলগুলির মাধ্যমে সম্পন্ন হয়েছে । লিনাক্স এবং অন্যান্য * নিক্স সিস্টেমে প্রক্রিয়া তৈরির মূলত মূলত এই দুটিয়ের উপর ভিত্তি করে। নন-বিল্টিন কমান্ডগুলি চালনার শেল প্রক্রিয়া বিশেষত এটি ব্যবহার করে। আপনি যখন ইন্টারেক্টিভ চালাবেন

    $ ls 
    

    শেল এর মাধ্যমে একটি নতুন প্রক্রিয়া তৈরি করবে fork(), সেই প্রক্রিয়াটি চলবে execve() যা শুরু হবে ls। কিভাবে কারণে execve()যে নতুন Forked প্রক্রিয়া হতে হবে lspipe()সিস্টেম কল কি সাহায্য করবে আউটপুট ফিরে পড়া হয় ls। পাইপ প্রক্রিয়াটি কীভাবে কাজ করে তা বোঝার জন্য পাইপ এবং পুনঃনির্দেশের মধ্যে পার্থক্য কী - তার জন্য আমার উত্তরটি পড়ার আমি দৃ .়ভাবে পরামর্শ দিই - এটি কেবল |অপারেটরই নয়, আসলে একটি সিস্কেলও।

  • অ্যাপ্লিকেশনগুলি শেল কমান্ড চালাতে পারে? শেল বাক্য গঠনটি কেবল শেল নিজেই বুঝতে পারে। আপনি যা করতে পারেন তা হ'ল একটি কমান্ড-লাইন -cসুইচ দিয়ে শেল শুরু করা এবং উপযুক্ত কমান্ড সরবরাহ করা। এটি প্রায়শই জিনোম বা অন্যান্য ডেস্কটপ এনভায়রনমেন্টে সেট কাস্টম শর্টকাটের জন্য ব্যবহৃত হয়, যেহেতু কাস্টম শর্টকাট এক্সিকিউটেবলের উপর পরিচালনা করে এবং সিনট্যাক্স বোঝার জন্য কোনও শেল নেই। উদাহরণস্বরূপ, আপনি bash -c 'xdotool key Ctrl+Alt+T'পরোক্ষভাবে xdotoolকমান্ড চালাতে বা bash -c 'cd $HOME/Desktop; touch New_File'শর্টকাটের মাধ্যমে ডেস্কটপে নতুন ফাইল তৈরি করতে চাইবেন । এটি বিশেষত আকর্ষণীয় উদাহরণ হিসাবে আপনি শেল ভেরিয়েবল ব্যবহার করতে পারেন, যেহেতু আপনি স্পষ্টভাবে শেল ব্যবহার করছেন।


2
বিস্তারিতভাবে ব্যাখ্যা করার জন্য এবং প্রতিটি প্রশ্নের পৃথকভাবে এবং পদ্ধতিগতভাবে উত্তর দেওয়ার জন্য @ সার্জকে অনেক ধন্যবাদ!
ptmdevncoder

আমার আনন্দ, সবসময় সাহায্য :) আনন্দিত @Logan
Sergiy Kolodyazhnyy

1
ভাগ্যক্রমে, উল্লিখিত সরঞ্জামগুলির উত্স উপলব্ধ যেহেতু তারা এফএলএসএস। অতএব আমি বলব এ ক্ষেত্রে তাদের উল্টানো কিছুটা ওভারকিল। :)
Andrea Lazzarotto

1
@ আন্ড্রেআল্যাজারোত্তো ইয়েপ, ইউনিটি টুইটক টুল এবং ডকনফ সম্পাদক - এগুলি ওপেন সোর্স, সুতরাং এগুলি প্রকৌশলীকে বিপরীত করার দরকার নেই। আমার উত্তরে আমি সবকিছু খুব সাধারণ রেখেছি এবং কেবল সেই সরঞ্জামগুলিই নয়, তবে অন্যান্য সম্ভাবনাগুলিও কভার করার চেষ্টা করেছি
সের্গি কলডিয়াজহনি

দ্রুত GUI অ্যাপ্লিকেশনগুলির জন্য পয়েন্ট খুব কমই। শেল টুল দিয়ে ব্যবহারের জন্য মানগুলি থেকে বেরিয়ে আসা বা মার্শাল করা বিরক্তিকর, ভুল হওয়া সহজ এবং অর্থহীন, যদি আপনি কেবল লাইব্রেরিটি ব্যবহার করতে পারেন তবে। পুনরায় ডিবাগিং: অ্যাপ্লিকেশনটি ডিবাগ প্রতীক সহ ইনস্টল করা হয় এবং জিডিবি দ্বারা সমর্থিত কোনও ভাষায় লেখা হয় (ডিবিয়ানে যেমন একটি সম্পর্কিত -dbg প্যাকেজ ইনস্টল করে), আপনাকে এসেম্বেবলার জানতে হবে না: জিডিবি আপনাকে উত্স কোডটি প্রদর্শন করে প্রদর্শন করবে আপনি অ্যাপ্লিকেশন মাধ্যমে পদক্ষেপ যখন তথ্য ডিবাগ। বিরক্তিকর জিইউআই বয়লারপ্লেটের কারণে, ডিবাগিং শুরু করার জন্য একটি সঠিক প্রবেশের পয়েন্টটি পাওয়া শক্ত hard
জোনাস শ্যাফার

21

কি হয় গুপ্তচরবৃত্তি

এই সেটিংস সম্পাদকরা যা করেন তার বেশিরভাগই দৌড় দিয়ে দেখা যায়

dconf watch /

একটি টার্মিনালে।

gsettings

এছাড়াও বেশিরভাগ সময়, উপরের কমান্ডের সাহায্যে আপনি যা দেখছেন তা অর্জন করতে এই অ্যাপ্লিকেশনগুলির dconfডাটাবেসটি সম্পাদনা করতে হবে (আরও নীচে)। এটি হয় কাজ করা যেতে পারে সরাসরি , এর CLI অপশন ব্যবহার করে dconf , অথবা সংশ্লিষ্ট চালিয়ে (যা পছন্দের নয়) gsettingsআপনি উল্লেখ মত কমান্ড।

এই কমান্ডগুলি চালনার জন্য, কোনও টার্মিনাল উইন্ডোর প্রয়োজন নেই, যেমন আপনি উদাহরণগুলিতে দেখতে পারেন।

সম্পর্কে, gsettings, dconf এবং dconf ডাটাবেস

gsettingsএটি ক্লাইম ফ্রন্ট্যান্ডেড dconf, যা তার ঘুরিয়ে dconfডাটাবেস সম্পাদনা করে , যেখানে বেশিরভাগ সেটিংস সঞ্চিত থাকে, বাইনারি বিন্যাসে। আরও দেখুন এই সুন্দর উত্তর

dconfডাটাবেস, প্রণালী দ্বারা, এছাড়াও দ্বারা গুই থেকে সম্পাদনা করা যেতে পারে dconfসম্পাদক, যা ভান্ডার রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

কাজের নমুনা

ক। অজগরে

এখানে চিত্র বর্ণনা লিখুন

একক (টগল) বোতামে জিইউআই থেকে আপনার লঞ্চারের অবস্থানটি টগল করতে একটি কার্যকারী নমুনার নীচে, টুপিটির নীচে কী ঘটে তা আপনাকে দেখানোর জন্য:

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import subprocess

key = ["com.canonical.Unity.Launcher", "launcher-position"]

class ToggleWin(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Toggle")
        button = Gtk.Button("Toggle launcherposition")
        button.connect("clicked", self.toggle)
        self.add(button)

    def toggle(self, *args):
        # read the current setting on launcher position
        current = subprocess.check_output([
            "gsettings", "get", key[0], key[1]
            ]).decode("utf-8").strip()
        # toggle to the other option
        new = "'Left'" if current == "'Bottom'" else "'Bottom'"
        subprocess.Popen([
            "gsettings", "set", key[0], key[1], new
            ])

def delete_actions(*args):
    Gtk.main_quit()

def miniwindow():
    window = ToggleWin()
    window.connect("destroy", delete_actions)
    window.show_all()
    Gtk.main()

miniwindow()
  • কোডটি ফাঁকাতে আটকান file.py
  • কমান্ড দ্বারা এটি চালান:

    python3 /path/to/file.py
    

...এবং মজা করো.

খ। লঞ্চার আইকন

এমনকি একটি সাধারণ লঞ্চারও জিইউআই থেকে কাজটি করতে পারে:

এখানে চিত্র বর্ণনা লিখুন

[Desktop Entry]
Name=Set launcherposition
Exec=zenity --info --text="Right- click to set launcher position"
Type=Application
StartupNotify=False
Icon=preferences-system

Actions=Launcher to bottom;Launcher on the left;

[Desktop Action Launcher to bottom]
Name=Launcher to bottom
# right click option to set launcher to bottom
Exec=gsettings set com.canonical.Unity.Launcher launcher-position Bottom

[Desktop Action Launcher on the left]
Name=Launcher on the left
# right click option to set launcher to left
Exec=gsettings set com.canonical.Unity.Launcher launcher-position Left
  • একটি খালি ফাইলে কোডটি আটকান, এটি সংরক্ষণ করুন setlauncher.desktop
  • এটি লঞ্চারটিতে টানুন এবং ডান ক্লিক করুন

স্থায়ী ব্যবহারের জন্য, এটিকে ~/.local/share/applications(স্থানীয় ব্যবহারের জন্য) বা ~/usr/share/applicationsসমস্ত ব্যবহারকারীর জন্য সঞ্চয় করুন।


@ লোগান এটির উল্লেখ করবেন না :)
জ্যাকব ভিলিজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.