सभी खुली खिड़कियों को कैसे मारें?


9

मैं अपने डेस्कटॉप पर दिखाई देने वाली सभी विंडो बंद करना चाहता हूं। मैंने ऐसा करने के लिए सोचा है pkill, लेकिन मैं केवल एक बार उन्हें मारने का प्रबंधन कर सकता हूं, जो कि मैं नहीं चाहता। अंतिम लक्ष्य एक कियोस्क को चलाने के लिए इसे एक स्क्रिप्ट में रखना है, यह पता लगाएगा कि क्या कियोस्क सॉफ़्टवेयर चल रहा है (मुझे यह हिस्सा पता चल गया है) और यदि यह नहीं है, तो यह खुली हुई किसी भी विंडो को मार देगा, और मुझे पुनरारंभ करेगा कियोस्क सॉफ्टवेयर।


जीडीएम या केडीएम को फिर से शुरू करने के बारे में
रज़ा

जवाबों:


3

सबसे सरल दृष्टिकोण का उपयोग करता है xdotool:

xdotool search "" windowkill %@

xdotool search ""हर विंडो को सूचीबद्ध करता है। windowkill %@उनमें से हर एक को मारता है; पिछली खोज के सभी परिणामों %@को संदर्भित करता है

आप शीर्ष-स्तरीय खिड़कियों के लिए चयनित खिड़कियों को सीमित करने के लिए --maxdepth 1विकल्प का उपयोग करना पसंद कर सकते हैं search


1
अफसोस की बात है कि वीएनसी का उपयोग करते समय यह काम नहीं करता है (xdotool एक विभाजन दोष उठाता है)।
डिएगो क्विरोज़

यह शायद एक और सवाल के लायक है - चीजें VNC के तहत समान होनी चाहिए या नहीं।
माइकल होमर

मैं सहमत हूं, लेकिन ऐसा नहीं है। इस मुद्दे के बारे में एक बग रिपोर्ट है: github.com/jordansissel/xdotool/issues/126
Diego Queiroz

2

यह कम से कम kde और xfce के लिए काम करता है (सूक्ति परीक्षण नहीं किया गया, लेकिन यह भी काम कर सकता है):

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) इस प्रविष्टि से close_windows स्क्रिप्ट निष्पादित करें।

स्रोत: https://forum.manjaro.org/index.php?topic=4412.0 :


सही समाधान। और यह VNC के साथ भी काम करता है। जोड़ने के लिए महत्वपूर्ण है कि आपको अपनी स्थापना स्थानीयकरण से मिलान करने के लिए "डेस्कटॉप $" बदलने की आवश्यकता हो सकती है (उदाहरण के लिए पुर्तगाली में यह "horea de trabalho $" है)।
डिएगो क्विरोज़

2

माइकल होमर और गुइडो वैन स्टीन ने सभी खिड़कियों को मारने के तरीके दिखाए हैं। यह पृष्ठभूमि प्रक्रियाओं को नहीं मारेगा, अगर कोई हो। यह दुर्घटनाग्रस्त कार्यक्रमों को नहीं मारेगा जिनकी खिड़की चली गई है लेकिन यह अभी भी उपयोगकर्ता इंटरफ़ेस के बिना निष्पादित कर रहे हैं। इसलिए आप इसके बजाय प्रक्रियाओं को मारना पसंद कर सकते हैं।

आप kill -9 -1उस उपयोगकर्ता के रूप में चल रही सभी प्रक्रियाओं को मारने के लिए एक गैर-रूट उपयोगकर्ता के रूप में चला सकते हैं। आपको कियोस्क एप्लिकेशन को एक समर्पित उपयोगकर्ता के रूप में चलाने की आवश्यकता होगी (यह कियोस्क के लिए एक मानक कॉन्फ़िगरेशन है, सुरक्षा के लिए) और यह सुनिश्चित करने के लिए कि कियोस्क इंटरफ़ेस फिर से शुरू होता है जब सत्र में सभी प्रक्रियाएं मृत हो जाती हैं (जो कि किर्क के लिए एक मानक कॉन्फ़िगरेशन भी है) मजबूती के लिए)।


0

गुइडो का जवाब मेरे लिए पूरी तरह से काम करता है। मैंने अपने स्वयं के उपयोग के लिए लाजर / एफपीसी के साथ संकलित एक छोटा लिनक्स / विंडोज क्रॉस-कंपैटिबल पास्कल प्रोग लिखा है, जो अपने wmctrl कमांड या समकक्ष पॉवर्सशेल विंडोज कमांड को लॉन्च करता है:

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 वातावरण पर काम करेगा। मैं वातावरण चर में डेस्कटॉप नाम नहीं खोज पा रहा था (और यह परेशानी के लायक नहीं था)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.