আমি কোনও লগ ফাইলটিতে তার বিকল্প কমান্ড-লাইন ফর্ম্যাটে সমস্ত জিইউআই ভিত্তিক কাজ দেখতে পাচ্ছি?


9

উদাহরণস্বরূপ, আমি সাধারণত অ্যাপ্লিকেশন মেনু থেকে মাউসপ্যাড (জিডিটের সমতুল্য xfce) খুলি। তবে, আমি জানি যে আপনি টাইপ করেও টার্মিনালে এটি করতে পারেন mousepad

এই উদাহরণ অনুসরণ করে, আমি যা চাই তা যখনই আমি জিইউআইয়ের মাধ্যমে মাউসপ্যাড খুলি, তখন একটি নতুন লাইন একটি লগ ফাইলে লেখা থাকে যাতে কিছু লেখা থাকে Sep 5 15:35:11 lucho@lucho:~$ mousepad। আরও সাধারণভাবে, আমি যা চাই তা হ'ল সমস্ত জিইউআই ক্রিয়াকলাপগুলি যা সম্ভাব্যভাবে কমান্ড-লাইনের মাধ্যমে সক্ষম-সক্ষম (যেমন প্রোগ্রামগুলি খোলার, অনুমতি পরিবর্তন করা, একটি সিস্টেমের সেটিংস পরিবর্তন করা ইত্যাদি) তবে এর বিকল্প কমান্ড-লাইন কার্যকরকরণ ফর্ম্যাটে লিখিত । কমান্ড-লাইনটি ( manপৃষ্ঠাগুলি দিয়ে না গিয়ে ) কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আমার জ্ঞানের উন্নতি করতে আমি এটি চাই । জিইউআইয়ের মাধ্যমে আমি অনেকগুলি কাজ করি যা আমি কমান্ড-লাইনের মাধ্যমে করি না (কিছু সম্ভাব্যভাবে কোনও স্ক্রিপ্টের মাধ্যমে বা কীবোর্ড শর্টকাটের মাধ্যমে অটোমেটেবল) এবং এই লগ ফাইলটি তাদের শেখার একটি ভাল উপায় হবে।

আমি সিসলগ ফাইলের অস্তিত্ব সম্পর্কে সচেতন /var/logকিন্তু এটি আমার প্রয়োজনের নয়। উবুন্টু সংগ্রহস্থলগুলির ক্রিয়াকলাপ লগ ম্যানেজার অ্যাপ্লিকেশনটি যতদূর আমি জানি কমান্ড-লাইন ফর্ম্যাটটি প্রদর্শন করে না। আমার বাড়ির ফোল্ডারে থাকা .bash_history ফাইলের মতো কিছু দরকার তবে আমার জিইউআই-ভিত্তিক ক্রিয়াকলাপ রেকর্ড করে।


আপনি চলমান প্রোগ্রামে উঁকি দেওয়ার জন্য স্ট্রেসের মতো একটি সরঞ্জাম ব্যবহার করতে পারেন এবং এটি কী সিস্টেম বলে এটি দেখতে এটি কী উপকার করে তা দেখতে এটি প্রচুর পরিমাণে ডেটা তৈরি করবে যদিও
অমিয়াস

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

@ সার্গ আপনি যে লগটি প্রস্তাব করবেন এটি অবশ্যই আমার জন্য সন্ধান করছে। জিএলআই নামগুলির পরিবর্তে সিএলআই নামের উপর ভিত্তি করে "টাস্ক ম্যানেজার" লগের মতো কিছু, যা বিদ্যমান উত্তর অনুসারে বোঝা যায় না। উদাহরণস্বরূপ, আমি যদি সেটিংসে "ভাষা সমর্থন" খুলি, আমি এর সিএলআই সমতুল্য জানতে চাই। ইত্যাদি ...

@ লুচোনাচো ঠিক আছে, আমি আজই লিখতে শুরু করব, এটি প্রস্তুত হলে পোস্ট করব। যাইহোক, সেটিংসে "ভাষা সমর্থন" এর নিজস্ব সমতুল্য ক্লাইম নেই cli কিছু জিনিস যেমন ব্লুটুথ মেনু বা ব্যাকগ্রাউন্ড মেনু করে - আপনি নির্দিষ্ট করতে পারেন unity-control-center backgroundবা gnome-control-center background(আপনার ডেস্কটপ, ইউনিটি বা এক্সএফসিই বা জিনোমের উপর নির্ভর করে)। তবে বাইরের পৃথিবী সম্ভবত কেবল দেখতে পাবেgnome-control-center
সের্গেই কোলডিয়াজনি

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

উত্তর:


2

ভূমিকা

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

সোর্স কোড

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

def run_cmd(cmdlist):
    """ Reusable function for running external commands """
    new_env = dict(os.environ)
    new_env['LC_ALL'] = 'C'
    try:
        stdout = subprocess.check_output(cmdlist, env=new_env)
    except subprocess.CalledProcessError:
        pass
    else:
        if stdout:
            return stdout
def print_info(stack,event):
    base_xprop = ['xprop','-notype']
    for xid in stack:
        pid = None
        check_pid = run_cmd(base_xprop + [ '_NET_WM_PID', '-id',str(xid)])
        if check_pid:
            pid = check_pid.decode().split('=')[1].strip()
        with open('/proc/'+pid+'/cmdline') as fd:
            command = fd.read()
        print(time.strftime("%D %H:%M:%S" + " "*3) + event + pid + " " + command)

def main():
    sc = Gdk.Screen.get_default()
    old_stack = None

    while True:
        stack = [ win.get_xid() for win in sc.get_window_stack() ]
        if old_stack:
            # Difference between current and old stack will show new programs
            diff = set(stack) - set(old_stack)
            if diff:
                print_info(diff," 'New window open' ")
        else:
            print_info(stack," 'Script Started' ")

        old_stack = stack
        time.sleep(2)

if __name__ == '__main__': main()

পরীক্ষা রান:

$ ./log_open_windows.py                                                                                                
01/25/17 15:33:13    'Script Started' 2915 nautilus-n
01/25/17 15:33:13    'Script Started' 3408 /opt/google/chrome/chrome
01/25/17 15:33:13    'Script Started' 12540 /usr/bin/python/usr/bin/x-terminal-emulator
01/25/17 15:33:13    'Script Started' 2454 compiz
01/25/17 15:33:13    'Script Started' 2454 compiz
01/25/17 15:33:13    'Script Started' 2454 compiz
01/25/17 15:33:13    'Script Started' 2454 compiz
01/25/17 15:33:13    'Script Started' 2454 compiz
01/25/17 15:33:21    'New window open' 15143 /usr/lib/firefox/firefox-new-window
01/25/17 15:33:27    'New window open' 15196 unity-control-center

স্ক্রিপ্টটি টাইমস্ট্যাম্প, ইভেন্টের ধরণ, উইন্ডো পিআইডি এবং সংশ্লিষ্ট কমান্ড প্রদর্শন করে।

ব্যবহারবিধি

যে কোনও স্ক্রিপ্টের মানক বিধি প্রযোজ্য। আপনি স্ক্রিপ্টটি ~/binডিরেক্টরিতে সঞ্চয় করেছেন তা নিশ্চিত করুন । আপনার যদি ~/binডিরেক্টরি না থাকে তবে একটি তৈরি করুন। স্ক্রিপ্ট ফাইলটি সেখানে সংরক্ষণ করুন এবং এটি কার্যকর করার যোগ্য তা নিশ্চিত করুন chmod +x ~/bin/log_open_windows.py। এর পরে আপনি ~/log_open_windows.pyকমান্ড-লাইনে কল করে যে কোনও সময় কমান্ড লাইন থেকে চালাতে পারেন ।


ধন্যবাদ। প্রতিশ্রুতিবদ্ধ মনে হচ্ছে! দুটি প্রশ্ন। কীভাবে এটি চালানো যায়? ১০% নিখোঁজ কি?

নিফটি! আমার কাছ থেকে +1!
ফাব্বী

@ লুচোনাচো আমি ব্যবহারের জন্য একটি অনুচ্ছেদ যুক্ত করেছি। আমি বর্ণিত কমান্ড-লাইন থেকে আপনি এটি ম্যানুয়ালি ব্যবহার করার পরামর্শ দিচ্ছি। আপনি এটি স্টার্ট আপে স্বয়ংক্রিয়ভাবে শুরু করতে পারেন, তবে আমি এটি করার প্রস্তাব দিই না। অনুপস্থিত 10% হ'ল আমি যুক্ত করতে চেয়েছিলেন এমন আরও কয়েকটি বৈশিষ্ট্য, তবে আমি মনে করি না যে আমি সেগুলি যুক্ত করব। এটি আপাতত যথেষ্ট ভাল কাজ করে। তবে আমি আবার আমার মন পরিবর্তন করব
সের্গেই কলডিয়াজন্য

আমি সম্ভবত যা খুঁজছিলাম তা আপনি সম্ভবত এটি পেতে পারেন, জেনেশুনে যে নিখুঁত সমাধানের অস্তিত্ব নেই। ধন্যবাদ!

4

সেই ধরণের লগ ফাইলটি শেখার জন্য বেস হিসাবে প্রস্তাব করা আসলে একটি উজ্জ্বল ধারণা!

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

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

উদাহরণস্বরূপ, Filesকমমান লাইনে প্রোগ্রামটি কীভাবে শুরু করবেন ?

*.desktopনামের জন্য আমাদের সমস্ত ফাইল খতিয়ে দেখা উচিত । সেখানে, আমরা Execলাইনে কমান্ডটি পেয়েছি :

locate -b '.desktop' | xargs grep -ls '^Name.*=Files$' | xargs grep '^Exec.*'

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

কমান্ড, আমি খোঁজ Filesহতে পারে nautilus, dolphinবা active-filebrowser:

/etc/xdg/autostart/nautilus-autostart.desktop:Exec=nautilus -n
/usr/share/app-install/desktop/nemo:nemo.desktop:Exec=nemo %U
/usr/share/app-install/desktop/plasma-active:kde4__active-filebrowser.desktop:Exec=active-filebrowser -graphicssystem raster %u
/usr/share/applications/nautilus-folder-handler.desktop:Exec=nautilus %U
/usr/share/applications/nautilus.desktop:Exec=nautilus --new-window %U
/usr/share/applications/nautilus.desktop:Exec=nautilus --new-window

মিম, আমার প্রশ্নটি একটি ছোট আকারের জটিলতার লিনাক্সের দৃষ্টিভঙ্গি রচনা করে, যেখানে আরও বিস্তৃত প্রোগ্রামগুলি সহজ কোডের উপর ভিত্তি করে তৈরি করা হয়, তাই আমি ভেবেছিলাম যে কোনও জিইউআই অ্যাপ্লিকেশন টার্মিনাল কমান্ডের উপর নির্ভর করছে তবে টার্মিনালটি বাশ কোডের উপর ভিত্তি করে টার্মিনাল যেখানে বা সফটওয়্যার রয়েছে পাইথন বা সি ++ বা অন্যায় লেখা যেতে পারে আমি কি ভুল করছি?

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