モニターとラップトップの画面があり、「デスクトップの表示」機能に問題があります。
ノートパソコンの画面には、常に表示されるウィジェットが表示されています。メインモニターは通常使用されます。
キーボードショートカット(この場合は、windowsキー+ d)を使用すると、すべてのウィンドウが非表示になりますが、特定のモニターのすべてのウィンドウを非表示にしたいだけです。
これは可能ですか?
https://superuser.com/questions/200945/how-can-i-make-the-show-desktop-function-only-hide-the-windows-on-a-specific-mに類似した質問 、異なるOSについて質問する顕著な違いがあります。
以下のスクリプトは、左画面のウィンドウまたはのみを最小化するために使用できます。
スクリプトは、ウィンドウを最小化する画面に応じて、1
または2
を引数として実行されます。
#!/usr/bin/env python3
import subprocess
import sys
scr = sys.argv[1]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8")
# find the right side of the left screen
Edge = [int(s.split("x")[0]) for s in get("xrandr").split() if "+0+" in s][0]
# read the window list
wlist = [w.split() for w in get(["wmctrl", "-lG"]).splitlines()]
for w in wlist:
# retrieve the window id and -position
w_id = w[0]; xpos = int(w[2])
# check the position of the window, decide action depending on arg.
test = xpos < Edge if scr == "1" else xpos >= Edge
if test:
# check if the window is "normal" and / or minimized
w_data = get(["xprop", "-id", w_id])
if all([not "_NET_WM_STATE_HIDDEN" in w_data,
"_NET_WM_WINDOW_TYPE_NORMAL" in w_data]):
subprocess.Popen(["xdotool", "windowminimize", w_id])
スクリプトにはwmctrl
とxdotool
の両方が必要です
Sudo apt-get install xdotool wmctrl
スクリプトを空のファイルにコピーし、min_screen.py
として保存します
実行するには:
python3 /path/to/min_screen.py 1
左画面のウィンドウを最小化する
python3 /path/to/min_screen.py 2
正しい画面でのみウィンドウを最小化する
Unity
で作成されましたが、ワークスペース(ビューポート)とは異なり、screensを処理しても違いはありません。tkinter
windows)。それが問題であれば、言及してください。解決できます。スクリプトは、最初にxrandr
の出力で+0+
を含む文字列を検索することにより、左画面の右端を検索します。
1680x1050+0+0
最初のセクション1680
は、左画面の幅です。その後、ウィンドウリスト(wmctrl -lG
)を調べて、どのウィンドウが「下」または「上」にあるかを確認し、1680
を確認して、コマンドxdotool windowminimize <window_id>
(またはそうでない)。
最後に「テスト」(mmiz
):xprop -id <window_id>
は、「通常の」ウィンドウを処理しているかどうかを確認します(たとえば、デスクトップもウィンドウとしてリストされます)。ウィンドウはすでに最小化されています。
スクリプト内のコメントも参照してください。
Lubuntuでグローバルキーボードショートカットを編集するには、 Lubuntuはすべてのデスクトップキーボードショートカットを表示しますか? を参照してください。
この場合:この回答のスクリプトをコンピューター上のファイルに保存し、このファイルを実行可能にし、/.config/openbox/lubuntu-rc.xml
を開いて置き換えます
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
</keybind>
沿って
<action name="Execute">
<command>/path/to/show_desktop.py 1</command>
</action>
ここで、/path/to/show_desktop.py
は(もちろん)スクリプトへのパスであり、1
または2
はターゲット画面です。 スクリプトを実行可能にします。
コンピューターを再起動して構成を再読み込みします。
スクリプトを実行可能にします、システム設定>「キーボード」>「ショートカット」>「カスタムショートカット」。 「+」をクリックして、コマンドを追加します。
/path/to/show_desktop.py 1
...お好みのショートカットへ
以下のスクリプトにより、ユーザーは必要なディスプレイをクリックすることができ、そのディスプレイ上のすべてのウィンドウが最小化されます。このスクリプトはキーボードショートカットにバインドされることを意図していますが、必要に応じて手動で実行できます。
使い方は簡単です:
このプログラムでは、追加のパッケージをインストールする必要はありません。このスクリプトは、通常のUbuntu 16.04 LTSおよびLubuntu 16.04 LTSでテストされています。 KDEを使用してFedora 24でもテストしてくれた@JourneymanGeekに感謝します!
スクリプトのソースコードは、ここに手動でコピーするか、または github リポジトリから取得することで取得できます。 git
から取得するには、次の手順を実行します。
Sudo apt-get install git
cd /opt ; Sudo git clone https://github.com/SergKolo/sergrep.git
Sudo chmod -R +x sergrep
ファイルは minimize_display_windows.py と呼ばれます。それをキーボードショートカットにバインドして、スクリプトへのフルパスを提供するようにしてください。たとえば、次のように:
python /opt/sergrep/minimize_display_windows.py
このコードを保存するファイルに実行許可があることを確認してください。
#!/usr/bin/env python
#
###########################################################
# Author: Serg Kolo , contact: [email protected]
# Date: July 3, 2016
# Purpose: Minimize windows on a display which user clicks
# Written for: http://askubuntu.com/q/793195/295286
# Tested on: Ubuntu 16.04 LTS,Lubuntu 16.04 Virtual Machine
###########################################################
# Copyright: Serg Kolo , 2016
#
# Permission to use,copy,modify,and distribute this software is hereby granted
# without fee, provided that the copyright notice above and this permission statement
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#
# https://opensource.org/licenses/MIT
from gi.repository import GdkX11,Gdk
import subprocess
def run_sh(cmd):
# reusable function to
# run Shell commands
# Returns stdout of the
# process
proc = subprocess.Popen(cmd, Shell=True,stdout=subprocess.PIPE)
out = proc.stdout.read().strip()
return out
# First,let the user click on any window
# on the monitor which they want to minimize.
# For that we need to extract integer XID of
# the window from xwininfo output.
# Basically,same as xwininfo -int | awk '/Window id/{print $4}'
user_selected = ""
for item in run_sh("xwininfo -int").split("\n"):
if "Window id" in item:
user_selected = item.split()[3]
# Here we basically get all the windows on the screen,
# and check if their XID matches the one user selected
# Once we find that window, we need to know to what display
# that window belongs.
screen = Gdk.Screen.get_default()
for window in screen.get_window_stack():
if str(window.get_xid()) == user_selected:
close_screen = int(screen.get_monitor_at_window(window))
# We know which display to close now. Loop over all
# windows again, and if they're on the same display
# the one that user chose - iconify it ( in X11 terminology
# that means minimize the window )
for window in screen.get_window_stack():
if screen.get_monitor_at_window(window) == close_screen :
window.iconify()
動作中のスクリプトの短い記録は、 youtubeチャンネル にあります。
元々、別のスクリプトを作成しましたが、Unityでのみ使用でき、xdotoolが必要です。興味のある方は Gist