বর্তমান ডেস্কটপ বিন্যাস সংরক্ষণ করার কোনও উপায় আছে?


29

আমি আমার অ্যাপ্লিকেশনগুলির বর্তমান অবস্থানগুলি সংরক্ষণ করতে সক্ষম হতে চাই তাই আমি যখন একই জিনিসগুলি খুলতে যাচ্ছি এবং কিছু চালাতে যাচ্ছিলাম তখন তারা আগের মতো পুনর্ব্যবহার করবে।

উদাহরণস্বরূপ, যদি আমি একটি উত্সাহ এবং তিনটি টার্মিনাল উইন্ডো খোলার জন্য চাই তবে আমি এটি কোনওভাবে সংরক্ষণ করতে সক্ষম হতে চাই।

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

যতক্ষণ আমি সহজেই আমার অ্যাপ্লিকেশনগুলির অবস্থানগুলি সংরক্ষণ করতে পারি ততক্ষণ আমি এটি কোনও অ্যাপ্লিকেশন বা কমান্ড লাইন সরঞ্জাম কিনা তা বিবেচনা করি না।

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


@ ভিটালিয়াস কুচালস্কিস উইন্ডো লেআউটটি করবে , বা এটি সঠিক সংশোধনকারী ফাইলগুলি হওয়া উচিত? এবং আপনার উইন্ডো ম্যানেজার কি? (
Ityক্য

আমি জানিনা আপনি কোন উইন্ডো লেআউটটির কথা বলছেন? আমি মনে করি ওয়ার্কস্পেসে উইন্ডোজের অবস্থান এবং আকার সংরক্ষণ এবং লোড করার জন্য একটি সরঞ্জাম থাকবে বা থাকবে। এখনও অবধি আমি খুঁজে পেয়েছি [wmctrl] ( en.wikedia.org/wiki/Wmctrl )। তবে এই বৈশিষ্ট্যটি তৈরি করতে স্ক্রিপ্টগুলি লিখতে হবে বা কনফিগারেশন পরিবর্তন করতে হবে। সুতরাং আমি ভাবছি যে কেউ ইতিমধ্যে এটি তৈরি করেছে কিনা, এবং এটি ভাগ করে নেওয়ার জন্য যথেষ্ট সদয় ছিল।
কোয়ালফেই

@ ভাইটালিয়াস কুচালস্কিস আপনি কি এটি একবার দেখে নিতে পারেন: Askubuntu.com/questions/631392/… এটি ধরে নিয়েছে উইন্ডো গুলি খোলা থাকবে, তবে আমি ধরে নিচ্ছি আপনি কম্পিউটারটি বন্ধ করে উইন্ডো অবস্থানগুলি পুনরুদ্ধার করার পরে পুনরুদ্ধার করতে চান আকার এবং অবস্থান (বিন্যাস) তারপরে একটি গুরুত্বপূর্ণ প্রশ্ন হ'ল আপনি যদি কেবল অ্যাপ্লিকেশন উইন্ডোগুলি বা উইন্ডোজের ভিতরে খোলা ফাইলগুলি উল্লেখ করে থাকেন ।
জ্যাকব ভিলিজম

অবশ্যই অ্যাপ্লিকেশন উইন্ডোজ অবশ্যই।
কোয়ালফি

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

উত্তর:


26

বিঃদ্রঃ

স্ক্রিপ্টটি 16 জানুয়ারী 2017 এ প্যাচ করা হয়েছে / ঠিক করা হয়েছিল, কয়েকটি অ্যাপ্লিকেশনের জন্য ঠিক করা, যার মধ্যে অ্যাপ্লিকেশনটি চালানোর জন্য প্রক্রিয়াটির নাম আদেশের থেকে পৃথক হয় । সম্ভবত, অ্যাপ্লিকেশনগুলিতে এটি মাঝে মধ্যে ঘটে। যদি কারও একটি পাওয়া যায় তবে দয়া করে একটি মন্তব্য করুন।


উইন্ডো বিন্যাস এবং তাদের সম্পর্কিত অ্যাপ্লিকেশন মনে রাখবেন এবং পুনরুদ্ধার করতে স্ক্রিপ্ট।

নীচের স্ক্রিপ্টটি দুটি বিকল্প দিয়ে চালানো যেতে পারে। ধরা যাক আপনার নীচের মত উইন্ডো ব্যবস্থা আছে:

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

করার পড়া (স্মরণ কর) বর্তমান উইন্ডোটি বিন্যাস এবং তাদের অ্যাপ্লিকেশন, বিকল্প স্ক্রিপ্ট সঞ্চালন করুন:

<script> -read

তারপরে সমস্ত উইন্ডো বন্ধ করুন:

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

তারপরে সর্বশেষ স্মরণে রাখা উইন্ডো বিন্যাসটি সেট আপ করতে, বিকল্পটি দিয়ে এটি চালান:

<script> -run

এবং শেষ মনে রাখা উইন্ডো বিন্যাস পুনরুদ্ধার করা হবে:

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

এটি পুনরায় চালু করার পরেও কাজ করবে।

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

স্ক্রিপ্টটি কী করে এবং কী করে না

অপশন দিয়ে চালান -read

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

অপশন দিয়ে চালান -run

  • স্ক্রিপ্টটি সর্বশেষ স্মরণে রাখা উইন্ডো বিন্যাসটি পড়ে; এটি সম্পর্কিত অ্যাপ্লিকেশনগুলি শুরু করে, উইন্ডোগুলির সাহায্যে স্মরণে রাখা পজিশনে সরিয়ে দেয়wmctrl

স্ক্রিপ্টটি সেই ফাইলগুলি মনে রাখে না যা সম্ভবত উইন্ডোগুলিতে খোলা হতে পারে এবং (যেমন) ব্রাউজার উইন্ডোতে খোলা ওয়েবসাইটগুলি।

সমস্যা

সমন্বয় wmctrlএবং Unityকিছু বাগ, কয়েকটি উদাহরণ রয়েছে:

  • উইন্ডো স্থানাঙ্ক হিসাবে wmctrlকিছুটা আলাদা করে পড়লে উইন্ডো অবস্থানের জন্য কিছুটা কমান্ড তৈরি করে , যেমনটি এখানে উল্লেখ করা হয়েছে । সুতরাং পুনরায় কল করা উইন্ডো অবস্থানগুলি মূল অবস্থান থেকে কিছুটা পৃথক হতে পারে।
  • wmctrlকমান্ড একটু অনিশ্চিত কাজ করে উইন্ডোর প্রান্ত খুব কাছাকাছি হয় হয় Unity Launcherবা প্যানেল।
  • wmctrlপ্লেসমেন্ট কমান্ডটি ভালভাবে কাজ করতে "ওয়ার্মস্পেসের সীমানার ভিতরে" মনে রাখা "উইন্ডোজগুলি সম্পূর্ণরূপে থাকা দরকার ।

কিছু অ্যাপ্লিকেশন একই উইন্ডোটিতে একটি নতুন ট্যাবে (পছন্দ মতো gedit) ডিফল্টরূপে নতুন উইন্ডোজ খোলায় । আমি এটির জন্য স্থির করেছি gedit, তবে আপনি যদি আরও ব্যতিক্রম খুঁজে পান তবে দয়া করে এটি উল্লেখ করুন।

এই পান্ডুলিপি

#!/usr/bin/env python3
import subprocess
import os
import sys
import time

wfile = os.environ["HOME"]+"/.windowlist"
arg = sys.argv[1]

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def check_window(w_id):
    w_type = get("xprop -id "+w_id)
    if " _NET_WM_WINDOW_TYPE_NORMAL" in w_type:
        return True
    else:
        return False

def get_res():
    # get resolution and the workspace correction (vector)
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    res = [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
    vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    return [res, curr_vpdata]

app = lambda pid: subprocess.check_output(["ps", "-p",  pid, "-o", "comm="]).decode("utf-8").strip()

def read_windows():
    res = get_res()
    w_list =  [l.split() for l in get("wmctrl -lpG").splitlines()]
    relevant = [[w[2],[int(n) for n in w[3:7]]] for w in w_list if check_window(w[0]) == True]
    for i, r in enumerate(relevant):      
        relevant[i] = app(r[0])+" "+str((" ").join([str(n) for n in r[1]]))
    with open(wfile, "wt") as out:
        for l in relevant:
            out.write(l+"\n")

def open_appwindow(app, x, y, w, h):
    ws1 = get("wmctrl -lp"); t = 0
    # fix command for certain apps that open in new tab by default
    if app == "gedit":
        option = " --new-window"
    else:
        option = ""
    # fix command if process name and command to run are different
    if "gnome-terminal" in app:
        app = "gnome-terminal"
    elif "chrome" in app:
        app = "/usr/bin/google-chrome-stable"


    subprocess.Popen(["/bin/bash", "-c", app+option])
    # fix exception for Chrome (command = google-chrome-stable, but processname = chrome)
    app = "chrome" if "chrome" in app else app
    while t < 30:      
        ws2 = [w.split()[0:3] for w in get("wmctrl -lp").splitlines() if not w in ws1]
        procs = [[(p, w[0]) for p in get("ps -e ww").splitlines() \
                  if app in p and w[2] in p] for w in ws2]
        if len(procs) > 0:
            time.sleep(0.5)
            w_id = procs[0][0][1]
            cmd1 = "wmctrl -ir "+w_id+" -b remove,maximized_horz"
            cmd2 = "wmctrl -ir "+w_id+" -b remove,maximized_vert"
            cmd3 = "wmctrl -ir "+procs[0][0][1]+" -e 0,"+x+","+y+","+w+","+h
            for cmd in [cmd1, cmd2, cmd3]:   
                subprocess.call(["/bin/bash", "-c", cmd])
            break
        time.sleep(0.5)
        t = t+1

def run_remembered():
    res = get_res()[1]
    try:
        lines = [l.split() for l in open(wfile).read().splitlines()]
        for l in lines:          
            l[1] = str(int(l[1]) - res[0]); l[2] = str(int(l[2]) - res[1] - 24)
            open_appwindow(l[0], l[1], l[2], l[3], l[4])   
    except FileNotFoundError:
        pass

if arg == "-run":
    run_remembered()
elif arg == "-read":
    read_windows()

কিভাবে বসাব

আপনি শুরু করার আগে, নিশ্চিত হয়ে নিন যে wmctrlএটি ইনস্টল রয়েছে:

sudo apt-get install wmctrl

তারপর:

  1. একটি খালি ফাইলে স্ক্রিপ্ট কপি, যেমন এটি সংরক্ষণ recall_windowsমধ্যে ~/bin। প্রয়োজনে ডিরেক্টরি তৈরি করুন। ডিরেক্টরিটি এখনও উপস্থিত না থাকলে source ~/.profileডিরেক্টরিটি তৈরি করার পরে চালনা করুন বা লগ আউট করুন। এটা এখন হবে$PATH
  2. স্ক্রিপ্টটি কার্যকর (()) করুন।
  3. এখন কয়েক উইন্ডোজ, খুলতে gedit, firefoxবা যাই হোক না কেন, এবং কমান্ডটি (কোন পথ উপসর্গ প্রয়োজন) দ্বারা টার্মিনালে স্ক্রিপ্ট পরীক্ষা সঞ্চালন করুন:

    recall_windows -read
    
  4. জানালাগুলো বন্ধ কর. এখন একটি টার্মিনাল চালান:

    recall_windows -run
    

আপনার উইন্ডো সেটআপ এখন পুনরুদ্ধার করা উচিত

যদি সমস্ত ঠিকঠাক হয়, শর্টকাট কীগুলিতে দুটি কমান্ড যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাট"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডগুলি যুক্ত করুন:

recall_windows -read

এবং

recall_windows -run

দুটি ভিন্ন শর্টকাট কী


2
Hah! কেবল প্রথম অনুচ্ছেদটি পড়েছিলাম এবং আমি জানতাম এটি আপনার একটির মধ্যে একটি ছিল! (
upvated

@ ফ্যাবি এবং আমার ছুটি উদযাপন :)
জ্যাকব ভিলিজ

দুর্দান্ত লাগছে! এখন কেউ সহজেই একটি সেটিং নামের জন্য একটি দ্বিতীয় প্যারাম যুক্ত করতে পারে এবং তারপরে বিভিন্ন পরিবেশ, ক্লায়েন্টএ, ক্লায়েন্টবি, হোম, স্টোর / পুনরুদ্ধার করতে পারে!
বাচি

বিভিন্ন সংস্করণ দুর্দান্ত হবে, যদি এটি প্রোগ্রামটি বন্ধ করতে পারে তবে দুর্দান্ত। বউ এলে স্ক্রিনে কিছু আছে কিনা তা ভাবতে ভাবতে আমি এটিকে সহজেই ভাবতে পারি যে আমি কাজ করছি!
জেমি হাটবার

আপনি সম্ভবত এই কর্মক্ষেত্র-সম্পর্কিত সমস্যাটি একবার দেখে নিতে পারেন ? ধন্যবাদ !!
বাদামি প্রায়

4

আমি একটি ছোট লাইব্রেরি / কমান্ড লাইন সরঞ্জাম লিখেছিলাম যা সেশনগুলি সংরক্ষণ এবং পুনরুদ্ধার করতে দেয় এবং বিভিন্ন মনিটরের সেটআপের পাশাপাশি ভার্চুয়াল ডেস্কটপগুলির জন্য সমর্থন করে।

স্থাপন

npm install -g linux-window-session-manager

ব্যবহার

বর্তমান সেশনটি ~ / .lwsm / সেশনডেটা / ডিএএফএলএটি.জেসনে সংরক্ষণ করুন

lwsm save

বর্তমান অধিবেশনটি ~ / .lwsm / সেশনডাটা / আমার-সেশন.জসনে সংরক্ষণ করুন

lwsm save my-session   

Session / .lwsm / সেশনডাটা / ডিএএফএএলএটি.জেসন থেকে সেশনটি পুনরুদ্ধার করুন

lwsm restore

Session / .lwsm / সেশনডাটা / আমার-সেশন.জসন থেকে সেশনটি পুনরুদ্ধার করুন

lwsm restore my-session   

অধিবেশন শুরু করার আগে সমস্ত চলমান অ্যাপসকে কৌতূহলীভাবে বন্ধ করুন

lwsm restore --closeAllOpenWindows

এটি দেখুন: https://github.com/johannesjo/linux-window-session-manager ager


1
দুর্দান্ত কাজ! এটি শীর্ষ উত্তর হতে হবে।
user3751385

2

এই জাতীয় কোন প্রোগ্রাম নেই। আপনি কমিজ কিউব ইনস্টল করতে পারেন:

sudo apt-get install compiz compizconfig-settings-manager compiz-fusion-plugins-extra compiz-fusion-plugins-main compiz-plugins

এবং এই কিভাবে অনুসরণ করুন

কমিজ একতা / জিনোমের জন্য সর্বাধিক উন্নত ডেস্কটপ সরঞ্জাম


1

আমি এটি অর্জনের সহজ উপায় জানি না।

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


ঠিক আছে আমি এটি বা অন্য কোনও কিছু পরিবর্তন করছি না ... তবে আমি আপনাকে নতুন টার্মিনালগুলি, অন্য একটি প্রকল্প, ব্রাউজারগুলি বন্ধ হয়ে যাচ্ছে বা অন্য কোনও কিছু সম্পর্কে জানার উদ্বোধন করছি the স্ক্রিনশটটি একটি উদাহরণ ছিল ..
লিপিস

হ্যাঁ ঠিক. আমার কাছে এমন ডেস্কটপ রয়েছে যা আমি কয়েক সপ্তাহ ধরে স্পর্শ করিনি যাতে বেশ কয়েকটি টার্মিনাল উইন্ডো, ব্রাউজার উইন্ডোজ, আর গ্রাফিক ডিসপ্লে উইন্ডো রয়েছে যা সমস্ত একটি নির্দিষ্ট প্রকল্পের সাথে সম্পর্কিত।
জানুয়ারী

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