কীভাবে সর্বদা নির্দিষ্ট ডিসপ্লেতে অ্যাপস শুরু করবেন?


11

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

মাধ্যমিকটি এমন একটি টিভি যেখানে আমি কোডি চালিত করি, যেখানে ডিসপ্লে চয়ন করার জন্য একটি সেটিংস রয়েছে।

এমন কিছু অ্যাপ্লিকেশন থাকতে পারে যা প্রতিটি অ্যাপের অবস্থান এবং প্রদর্শনের জন্য মনে রাখে এবং দ্বিতীয়টি বন্ধ করা অবস্থায়ও যত্ন নিতে পারে - মানে মনিটরটি আবার চালু না হওয়া পর্যন্ত অবস্থান মনে রাখুন। উবুন্টু সংস্করণের আগের সংস্করণগুলিতে এটি করুন তবে আর কিছু হবে না।

আপডেট: দারুচিনিতে DE পরিবর্তন করা হয়েছে


আমি এটিও খুঁজছি, আপনার ভাগ্য কি আছে?
ফিলিপ

@ ফিলিপ ভাগ্য নেই
লিওনিডমিউ

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

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

@ জ্যাকবভিলিজম হ্যাঁ, এটি সমাধান হতে পারে। তবে কীভাবে এটি লিখতে হবে তা আমি জানি না, আপনি কীভাবে দুটি কোড টুকরো দিতে পারেন - নতুন উইন্ডো কীভাবে নির্ধারণ করবেন এবং কীভাবে সরানো যায়
লিওনিডমিউ

উত্তর:


13

আপনার হাতগুলি নোংরা করার জন্য প্রস্তুত থাকুন
আমি মনে করি আমরা ব্যবহারকারীদের কী করতে বলি তার প্রান্তে, তবে অন্যদিকে, যখন নির্দেশাবলী পরিষ্কার থাকে তবে কেন নয়? সুতরাং আমরা এখানে ...


কোন মনিটরে নতুন উইন্ডোজ উপস্থিত হওয়া উচিত সেট করার জন্য পটভূমি প্রক্রিয়া

ভালা স্নিপেট

using Wnck;
using Gdk;
using Gtk;

// compile:
// valac --pkg gtk+-3.0 --pkg gio-2.0 --pkg libwnck-3.0 -X "-D WNCK_I_KNOW_THIS_IS_UNSTABLE" 'file.vala'

namespace move_newwins {

    private int[] monitor_geo_x;
    private int[] monitor_geo_y;
    private int monitorindex;
    private string currmon;

    private void getwins() {
        var dsp = Gdk.Display.get_default();
        unowned Wnck.Screen scr = Wnck.Screen.get_default();
        scr.force_update();
        get_monitors(dsp);
        scr.window_opened.connect(newwin);
    }

    private void newwin (Wnck.Window newwin) {
        newwin.unmaximize();
        int winx;
        int winy;
        int winwidth;
        int winheight;
        newwin.get_geometry(out winx, out winy, out winwidth, out winheight);
        Wnck.WindowType type = newwin.get_window_type();
        if (type == Wnck.WindowType.NORMAL) {
            newwin.set_geometry(
                Wnck.WindowGravity.NORTHWEST,
                Wnck.WindowMoveResizeMask.X |
                Wnck.WindowMoveResizeMask.Y |
                Wnck.WindowMoveResizeMask.WIDTH |
                Wnck.WindowMoveResizeMask.HEIGHT,
                monitor_geo_x[monitorindex] + 100,
                monitor_geo_y[monitorindex] + 100,
                winwidth, winheight
            );
        }
    }

    private int get_stringindex (string s, string[] arr) {
        for (int i=0; i < arr.length; i++) {
            if(s == arr[i]) return i;
        } return -1;
    }

    private void get_monitors(Gdk.Display dsp) {
        int nmons = dsp.get_n_monitors();
        string[] monitornames = {};
        for (int i=0; i < nmons; i++) {
            Gdk.Monitor newmon = dsp.get_monitor(i);
            monitornames += newmon.get_model();
            Rectangle geo = newmon.get_geometry();
            monitor_geo_x += geo.x;
            monitor_geo_y += geo.y;
            monitorindex = get_stringindex(
                currmon, monitornames
            );
        }
    }

    public static void main (string[] args) {
        currmon = args[1];
        Gtk.init(ref args);
        getwins();
        Gtk.main();
    }
}
  1. ভালা স্নিপেট সংকলন করা দরকার। এটি করার জন্য আপনাকে কয়েকটি জিনিস ইনস্টল করতে হবে:

    sudo apt install valac libwnck-3-dev libgtk-3-dev
    
  2. নীচে স্নিপেট অনুলিপি করুন, এটি সংরক্ষণ করুন win_tomonitor.vala

  3. কমান্ডটি সহ স্নিপেটটি কম্পাইল করুন:

    valac --pkg gtk+-3.0 --pkg gio-2.0 --pkg libwnck-3.0 -X "-D WNCK_I_KNOW_THIS_IS_UNSTABLE" '/path/to/win_tomonitor.vala' 
    

    (আমি জানি, ডাব্লিউএনসি আর্গুমেন্টটি নির্বোধ, তবে প্রয়োজনীয়), কার্যনির্বাহী ডিরেক্টরিতে একটি এক্সিকিউটেবল তৈরি করা হবে।

  4. xrandrটার্মিনালে কমান্ড চালিয়ে আপনার প্রাথমিক মনিটরের নামটি সন্ধান করুন ।
  5. আর্গুমেন্ট হিসাবে লক্ষ্যযুক্ত মনিটরের সাথে এক্সিকিউটেবল চালান eg

    /path/to/win_tomonitor HDMI-1
    

লক্ষ্যযুক্ত মনিটরের উপরের বাম দিক থেকে নতুন ("সাধারণ") উইন্ডোজ 100px (x + y) এ প্রদর্শিত হবে।

বিশেষ দ্রষ্টব্য

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


সম্পাদনা

সম্পাদিত সংস্করণের নীচে (অনুরোধে)। পার্থক্য:

  • এই সংস্করণটি উইন্ডোজগুলিতে ক্রিয়াটি এড়িয়ে যায় যা ইতিমধ্যে লক্ষ্যযুক্ত মনিটরে রয়েছে।
  • এই সংস্করণটি বাদ দেওয়া WM_CLASS-গুলি সেট করার অনুমতি দেয় । এক বা একাধিক ক্লাস বাদ দিতে: লক্ষ্যযুক্ত নজরদারি-যুক্তির পরে অতিরিক্ত যুক্তি যুক্ত করুন । একটি উদাহরণ:

    /path/to/win_tomonitor HDMI-1 Tilix Gedit
    

    তিলিক্স এবং জিডিট উইন্ডো উভয়কে সরানো থেকে বাদ দিতে।

সেটআপ প্রথম সংস্করণের মতোই as আনন্দ কর!

একটি উইন্ডোটির WM_CLASS সন্ধান করুন

  • একটি টার্মিনাল উইন্ডো খুলুন
  • টাইপ করুন xprop, টিপুনReturn
  • লক্ষ্যযুক্ত উইন্ডোতে ক্লিক করুন, WM_CLASSটার্মিনালে প্রদর্শিত হবে

কোড

using Wnck;
using Gdk;
using Gtk;

// compile:
// valac --pkg gtk+-3.0 --pkg gio-2.0 --pkg libwnck-3.0 -X "-D WNCK_I_KNOW_THIS_IS_UNSTABLE" 'file.vala'

namespace move_newwins {

    private int[] monitor_geo_x;
    private int[] monitor_geo_y;
    private int monitorindex;
    private string currmon;
    Gdk.Display dsp;
    string[] blacklist;

    private void getwins() {
        dsp = Gdk.Display.get_default();
        unowned Wnck.Screen scr = Wnck.Screen.get_default();
        scr.force_update();
        get_monitors(dsp);
        scr.window_opened.connect(newwin);
    }

    private void newwin (Wnck.Window newwin) {
        newwin.unmaximize();
        int winx;
        int winy;
        int winwidth;
        int winheight;
        newwin.get_geometry(out winx, out winy, out winwidth, out winheight);
        string wins_monitor = dsp.get_monitor_at_point(winx, winy).get_model();
        Wnck.WindowType type = newwin.get_window_type();
        string wm_class = newwin.get_class_group_name();
        bool blacklisted = get_stringindex(wm_class, blacklist) != -1;

        if (
            type == Wnck.WindowType.NORMAL &&
            wins_monitor != currmon &&
            !blacklisted
        ) {
            newwin.set_geometry(
                Wnck.WindowGravity.NORTHWEST,
                Wnck.WindowMoveResizeMask.X |
                Wnck.WindowMoveResizeMask.Y |
                Wnck.WindowMoveResizeMask.WIDTH |
                Wnck.WindowMoveResizeMask.HEIGHT,
                monitor_geo_x[monitorindex] + 100,
                monitor_geo_y[monitorindex] + 100,
                winwidth, winheight
            );
        }
    }

    private int get_stringindex (string s, string[] arr) {
        for (int i=0; i < arr.length; i++) {
            if(s == arr[i]) return i;
        } return -1;
    }

    private void get_monitors(Gdk.Display dsp) {
        int nmons = dsp.get_n_monitors();
        string[] monitornames = {};
        for (int i=0; i < nmons; i++) {
            Gdk.Monitor newmon = dsp.get_monitor(i);
            monitornames += newmon.get_model();
            Rectangle geo = newmon.get_geometry();
            monitor_geo_x += geo.x;
            monitor_geo_y += geo.y;
            monitorindex = get_stringindex(
                currmon, monitornames
            );
        }
    }

    public static void main (string[] args) {
        currmon = args[1];
        blacklist = args[1:args.length];
        Gtk.init(ref args);
        getwins();
        Gtk.main();
    }
}

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