কীভাবে সব খোলা উইন্ডোজ মেরে?


9

আমি আমার ডেস্কটপে প্রদর্শিত সমস্ত উইন্ডোটি বন্ধ করতে চাই। আমি এটি করার মাধ্যমে ভেবেছিলাম pkill, তবে আমি কেবল একবারে তাদের হত্যা করতে সক্ষম হয়েছি, যা আমি চাই না। শেষ লক্ষ্যটি কিওস্ক চালানোর জন্য এটি একটি স্ক্রিপ্টে রাখা, এটি সনাক্ত করবে কিওস্ক সফটওয়্যারটি চলমান আছে (আমি এই অংশটি বের করে দেখলাম) এবং যদি এটি না হয় তবে এটি খোলা রয়েছে এমন কোনও উইন্ডোটিকে মেরে ফেলবে এবং আমার পুনরায় চালু করবে কিওস্ক সফ্টওয়্যার


জিডিএম বা কেডিএম পুনরায় চালু করার বিষয়ে
রাজা

উত্তর:


3

সহজ পদ্ধতির ব্যবহার করে xdotool:

xdotool search "" windowkill %@

xdotool search ""প্রতিটি উইন্ডো তালিকাবদ্ধ করে। windowkill %@তাদের প্রত্যেককে মেরে ফেলে; পূর্ববর্তী অনুসন্ধানের সমস্ত ফলাফলকে %@বোঝায়

আপনি ব্যবহার করতে পছন্দ করেন --maxdepth 1বিকল্প থেকে searchউইন্ডোজ টপ লেভেল উইন্ডোজ নির্বাচিত সীমিত করতে।


1
দুঃখের বিষয়, ভিএনসি ব্যবহার করার সময় এটি কার্যকর হয় না (এক্সডটুল একটি সেগমেন্টেশন ত্রুটি উত্থাপন করে)।
দিয়েগো কুইরোজ

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

আমি রাজি, কিন্তু এটা না। এই সমস্যাটি সম্পর্কে একটি বাগ রিপোর্ট রয়েছে: github.com/jordansissel/xdotool/issues/126
দিয়েগো কুইরোজ

2

এটি কমপক্ষে কেডি এবং এক্সএফএসের জন্য কাজ করে (জিনোম পরীক্ষা করা হয়নি, তবে এটি পাশাপাশি কাজ করতে পারে):

1) wmctrl ইনস্টল করুন

2) তারপরে একটি স্ক্রিপ্ট তৈরি করুন close_windows.sh:

# close all open windows gracefully without closing the Desktop environment
WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
for i in $WIN_IDs; do wmctrl -ic "$i"; done
# Keep checking and waiting until all windows are closed (you probably don't need this section)
while test $WIN_IDs; do 
    sleep 0.1; 
    WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
done 

3) এটি সম্পাদনযোগ্য করুন:chmod +x ./close_windows.sh

3) স্টার্ট মেনুতে এমন একটি এন্ট্রি তৈরি করুন যা ক্লোজ_ উইন্ডো স্ক্রিপ্টকে নির্দেশ করবে।

4) এই এন্ট্রি থেকে ক্লোজ উইন্ডো স্ক্রিপ্টটি কার্যকর করুন।

উত্স: https://forum.manjaro.org/index.php?topic=4412.0 :


নিখুঁত সমাধান. এবং এটি ভিএনসির সাথেও কাজ করে। আপনার ইনস্টলেশন স্থানীয়করণের সাথে মেলে ধরতে আপনাকে "ডেস্কটপ $" পরিবর্তন করার প্রয়োজন হতে পারে তা যুক্ত করার জন্য গুরুত্বপূর্ণ (উদাহরণস্বরূপ পর্তুগিজ ভাষায় এটি "Área de trabalho $")।
দিয়েগো কুইরোজ

2

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

আপনি kill -9 -1যে ব্যবহারকারী হিসাবে চলমান সমস্ত প্রক্রিয়া মেরে ফেলার জন্য আপনি নন-রুট ব্যবহারকারী হিসাবে চালাতে পারেন । আপনাকে ডেডিকেটেড ব্যবহারকারী হিসাবে কিওস্ক অ্যাপ্লিকেশনটি চালাতে হবে (এটি যে কোনও উপায়ে কিওস্কের জন্য সুরক্ষার জন্য), এবং সেশনের সমস্ত প্রক্রিয়া শেষ হয়ে গেলে কিওস্ক ইন্টারফেসটি পুনরায় চালু হয় তা নিশ্চিত করা (এটি কিওস্কের জন্য একটি আদর্শ কনফিগারেশনও রয়েছে, দৃust়তার জন্য)।


0

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

program CloseAll;
{Ferme toutes les fenêtres}
{$mode objfpc}{$H+}
uses
    Classes, SysUtils, Process, Crt;

var
  p: TProcess;
 // i: integer=0;
  {$R *.res}
begin
      p := TProcess.Create(nil);
    try
        p.ShowWindow := swoHIDE; // Cache la console
        {$ifdef windows}
        p.Executable := 'cmd.exe';
        p.Parameters.Add('powershell -command "(New-Object -comObject Shell.Application).Windows() | foreach-object {$_.quit()}; Get-Process | Where-Object {$_.MainWindowTitle -ne \"\"} | stop-process"');
        {$else}
        p.Executable := '/bin/bash';
        p.Parameters.Add('-c');
        //close all open windows gracefully without closing the Desktop environment
        p.Parameters.Add ('WIN_IDs=$(wmctrl -l | grep -vwE "Bureau$|xfce4-panel$" | cut -f1 -d' + #39 + ' ' + #39 + ')' +#10 + 'for i in $WIN_IDs; do wmctrl -ic "$i"; done');
        //p.Options := p.Options + [poWaitOnExit, poUsePipes];
        {$endif}
        p.Execute;
    finally
        p.Free
    end
end.

আমি আরও লক্ষ্য করেছি যে ডিয়েগো ডেস্কটপের নাম সম্পর্কে সঠিক, এবং আমার লিনাক্স এক্সিকিউটেবল কেবল "ব্যুরো" নামক ডেস্কটপের সাথে একটি ফরাসী xfce পরিবেশে কাজ করবে। এনভায়রনমেন্ট ভেরিয়েবলগুলিতে আমি ডেস্কটপটির নামটি সন্ধান করতে সক্ষম হইনি (এবং এটি ঝামেলার পক্ষেও ছিল না)।

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