wmctrlがスクリプト内のウィンドウのサイズ変更/移動に失敗する

マジソウォン

たくさんのプログラムを開き、画面上のウィンドウを移動/サイズ変更するスクリプトを作成しようとしています。

例えば、

#!/bin/bash
zim
wmctrl -r Zim -b toggle,maximized_vert
wmctrl -r Zim -e 0,700,0,-1,-1

このスクリプトを実行すると、ウィンドウが最大化され、少し右に移動します。私は交換した場合でも、zimによってfirefoxまたはacroread、これは、ウィンドウのサイズを変更/移動に失敗しました。

wmctrlターミナルに入力すれば機能しますが、スクリプト内で使用したいのですが。firefox画面上の位置を覚える方法と関係があるのではないかと思います。

編集:私は配置しました

firefox
wmctrl -lG

スクリプト内で、次の出力が得られます。

0x03800032  0 1168 347  750  731  briareos emacs@briareos
0x02a00002  0 -2020 -1180 1920 1080 briareos XdndCollectionWindowImp
0x02a00005  0 0    24   47   1056 briareos unity-launcher
0x02a00008  0 0    0    1920 24   briareos unity-panel
0x02a0000b  0 -420 -300 320  200  briareos unity-dash
0x02a0000c  0 -420 -300 320  200  briareos Hud
0x03c00011  0 59   52   900  1026 briareos Notes - Zim

これは、スクリプトがFirefoxが起動されたことを認識していないことを意味します。

Jacob Vlijm

問題

問題は、使用するコマンドの組み合わせで、wmctrlコマンドが成功するためには、アプリケーションのウィンドウが時間内に表示されるように「幸運」である必要があるということです。
コマンドは、軽いアプリケーションではほとんどの場合機能し、すぐに起動しますが、Inkscape、Firefox、Thunderbirdなどの他のアプリケーションでは機能しません。

(コメントで述べたように)5秒または10秒の休憩を組み込むことができますが、必要以上に長く待たなければならないか、プロセッサが占有されていてウィンドウが「より遅い」場合は結局休憩します。いつもの」。

ソリューション

解決策は、スクリプトにプロシージャを含め、ウィンドウがの出力に表示されるのを待ってからwmctrl -lp、コマンドを実行してウィンドウを最大化することです。

python以下例ではxdotool、ウィンドウのサイズを変更するために使用wmctrlました。これは、仕事をするよりも少し堅牢です。

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

app = sys.argv[1]

# to only list processes of the current user
user = getpass.getuser()
get = lambda x: subprocess.check_output(x).decode("utf-8")
# get the initial window list
ws1 = get(["wmctrl", "-lp"]); t = 0
# run the command to open the application
subprocess.Popen(app)

while t < 30:
    # fetch the updated window list, to see if the application's window appears
    ws2 = [(w.split()[2], w.split()[0]) for w in get(["wmctrl", "-lp"]).splitlines() if not w in ws1]
    # see if possible new windows belong to our application
    procs = sum([[(w[1], p) for p in get(["ps", "-u", user]).splitlines() \
              if app[:15].lower() in p.lower() and w[0] in p] for w in ws2], [])
    # in case of matches, move/resize the window
    if len(procs) > 0:
        subprocess.call(["xdotool", "windowsize", "-sync", procs[0][0] , "100%", "100%"])
        break
    time.sleep(0.5)
    t = t+1

使い方

  1. このスクリプトは、両方を必要とするwmctrlxdotool

    sudo apt-get install wmctrl xdotool
    
  2. スクリプトを空のファイルにコピーし、名前を付けて保存します resize_window.py

  3. アプリケーションを引数としてスクリプトをテスト実行します。例:

    python3 /path/to/resize_window.py firefox
    

ノート

  • スタートアップアプリケーションでスクリプトとして使用する場合wmctrl、ウィンドウリストをフェッチするコマンドの実行が早すぎる可能性がわずかにあります。問題が発生した場合は、手順全体にtry/を追加する必要がありexceptます。もしそうなら、私に知らせてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ブラウザウィンドウのサイズが変更された場合に実行するjQueryスクリプトをトリガーします

分類Dev

スクリプト内から特定のウィンドウのサイズを特定のサイズと画面の場所に変更します

分類Dev

このwmctrlスクリプトがウィンドウを移動しないのはなぜですか

分類Dev

ブラウザ ウィンドウが垂直方向にスケーリングされている場合の CSS のサイズ変更の失敗

分類Dev

ブートストラップ列内のリンクは、ウィンドウのサイズ変更時にクリックできなくなります

分類Dev

ウィンドウのサイズを変更するときに、ブートストラップグリッド内の要素を中央揃えにする

分類Dev

ウィンドウのサイズを変更するときに、ブートストラップグリッド内の要素を中央揃えにする

分類Dev

Flutterデスクトップアプリのウィンドウサイズを変更する

分類Dev

Chromeアプリウィンドウでテキストエリアのサイズを動的に変更するにはどうすればよいですか?

分類Dev

ウィンドウのサイズ変更でアスペクト比が失われる

分類Dev

PowerShellウィンドウを開いた後、SFXインストーラーがPowerShellスクリプトの実行に失敗する

分類Dev

`wmctrl`を使用してPIDでウィンドウのサイズを変更して移動するにはどうすればよいですか?

分類Dev

ウィンドウのアンロード時にAjaxリクエストが失敗する

分類Dev

AppVeyorビルドスクリプトファイルのダウンロードが断続的に失敗する

分類Dev

スクロールバーを取得せずにリモートデスクトップウィンドウのサイズを変更する

分類Dev

画面のテキストサイズの変更時にアプリケーションが受信するウィンドウメッセージ

分類Dev

メインウィンドウのサイズを画像リソースのサイズに変更する方法

分類Dev

JQueryウィンドウのサイズ変更とメディアクエリを使用してスクリプトを1回起動します

分類Dev

リストボックスのサイズをウィンドウのサイズに結合する方法、UWPアプリC#

分類Dev

コンテナウィンドウに合わせてJavaスクリプト要素のサイズを変更する方法

分類Dev

C#wpfウィンドウサイズに応じてリストボックスのサイズを変更する

分類Dev

C#wpfウィンドウサイズに応じてリストボックスのサイズを変更する

分類Dev

bashスクリプトから、「ウィンドウのサイズ変更」のキーバインドを取得する方法はありますか?

分類Dev

ロードおよびサイズ変更ウィンドウでのメディアクエリ動的アクティブ/無効化スクリプト

分類Dev

Chromeでウィンドウのサイズを変更するたびに、画像も一緒に移動するため、テキストが重なる

分類Dev

ウィンドウのサイズが変更されたときにクラスを削除する

分類Dev

ChartJSは、ウィンドウのサイズが変更されるまで、ブートストラップタブ内にグラフを描画しません

分類Dev

ウィンドウのサイズが変更されたときにスケーリングするようにdivサイズを変更する

分類Dev

Oracleウィンドウでのサイズイメージの変更とスクリプト出力の問題

Related 関連記事

  1. 1

    ブラウザウィンドウのサイズが変更された場合に実行するjQueryスクリプトをトリガーします

  2. 2

    スクリプト内から特定のウィンドウのサイズを特定のサイズと画面の場所に変更します

  3. 3

    このwmctrlスクリプトがウィンドウを移動しないのはなぜですか

  4. 4

    ブラウザ ウィンドウが垂直方向にスケーリングされている場合の CSS のサイズ変更の失敗

  5. 5

    ブートストラップ列内のリンクは、ウィンドウのサイズ変更時にクリックできなくなります

  6. 6

    ウィンドウのサイズを変更するときに、ブートストラップグリッド内の要素を中央揃えにする

  7. 7

    ウィンドウのサイズを変更するときに、ブートストラップグリッド内の要素を中央揃えにする

  8. 8

    Flutterデスクトップアプリのウィンドウサイズを変更する

  9. 9

    Chromeアプリウィンドウでテキストエリアのサイズを動的に変更するにはどうすればよいですか?

  10. 10

    ウィンドウのサイズ変更でアスペクト比が失われる

  11. 11

    PowerShellウィンドウを開いた後、SFXインストーラーがPowerShellスクリプトの実行に失敗する

  12. 12

    `wmctrl`を使用してPIDでウィンドウのサイズを変更して移動するにはどうすればよいですか?

  13. 13

    ウィンドウのアンロード時にAjaxリクエストが失敗する

  14. 14

    AppVeyorビルドスクリプトファイルのダウンロードが断続的に失敗する

  15. 15

    スクロールバーを取得せずにリモートデスクトップウィンドウのサイズを変更する

  16. 16

    画面のテキストサイズの変更時にアプリケーションが受信するウィンドウメッセージ

  17. 17

    メインウィンドウのサイズを画像リソースのサイズに変更する方法

  18. 18

    JQueryウィンドウのサイズ変更とメディアクエリを使用してスクリプトを1回起動します

  19. 19

    リストボックスのサイズをウィンドウのサイズに結合する方法、UWPアプリC#

  20. 20

    コンテナウィンドウに合わせてJavaスクリプト要素のサイズを変更する方法

  21. 21

    C#wpfウィンドウサイズに応じてリストボックスのサイズを変更する

  22. 22

    C#wpfウィンドウサイズに応じてリストボックスのサイズを変更する

  23. 23

    bashスクリプトから、「ウィンドウのサイズ変更」のキーバインドを取得する方法はありますか?

  24. 24

    ロードおよびサイズ変更ウィンドウでのメディアクエリ動的アクティブ/無効化スクリプト

  25. 25

    Chromeでウィンドウのサイズを変更するたびに、画像も一緒に移動するため、テキストが重なる

  26. 26

    ウィンドウのサイズが変更されたときにクラスを削除する

  27. 27

    ChartJSは、ウィンドウのサイズが変更されるまで、ブートストラップタブ内にグラフを描画しません

  28. 28

    ウィンドウのサイズが変更されたときにスケーリングするようにdivサイズを変更する

  29. 29

    Oracleウィンドウでのサイズイメージの変更とスクリプト出力の問題

ホットタグ

アーカイブ