コマンドラインを使用して、画面上のアプリケーションのウィンドウ サイズと位置を設定するにはどうすればよいでしょうか?

コマンドラインを使用して、画面上のアプリケーションのウィンドウ サイズと位置を設定するにはどうすればよいでしょうか?

シェル コマンドを使用して、Firefox ウィンドウを特定のサイズと画面上の場所で開くようにしたい。例:

firefox myfile.html size 800x600 location bottom-left

そんなコマンドあるんですか?

答え1

以下はコミュニティ版の回答です。妖怪提供された例を取り入れたルドルフ・オラー


というツールを使用してxdotool、ウィンドウのサイズと位置を制御できます。それだけでなく、 をbash使用してで記述したスクリプトは、完全に最大化されたウィンドウで動作するように設定でき、 コマンドとコマンドxdotoolを操作してウィンドウのサイズと x:y 座標を設定するようにスクリプト化できます。mousemoveclick

  1. ウィンドウ ID を見つけます。

    xdotool search --onlyvisible --name firefox
    
  2. ウィンドウサイズを設定する

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
    
  3. ウィンドウを移動する

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y
    

たとえば、Firefox のウィンドウ ID が 123 の場合、次のようにします。

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

左下の位置は、画面の解像度に基づいて決定する必要があります。

答え2

私の知る限り、Firefoxはウィンドウを制御するコマンドを受け付けないので、これは不可能です。これは(主に)ウィンドウマネージャの責任でもあるので、それを行うためのパラメータが存在するとは思えません。ただし、次の方法でウィンドウを制御することができます。マウスコントロールですが、それは少し難しいでしょう:

#!/usr/bin/env bash

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

もっと賢い方法があるかもしれませんし、Firefox との相互運用性の問題 (他のインスタンスが実行されていないなど) もありますが、これで何とかなるはずです。

答え3

これでは位置の問題は解決されませんが、少なくとも寸法を設定することができます。

firefox -width 200 -height 500

答え4

私はいつもこれを行っています。ただし、より堅牢なため、DevilsPie2 を使用しています。これは LUA スクリプト言語を使用しており、それほど難しくありません。

以下は、Thunderbird 用の lua スクリプトです。これを開いたときに左端のモニター (ラップトップ画面) で開きます。

if (get_window_name()=="Mozilla Thunderbird") then
   pin_window()
   set_window_geometry( 50, 10, 1220, 780 )
end

where 50 = X coordinate (for upper-left corner of the window)
      10 = Y coordinate ( " " )
    1220 = window width
     780 = window height

これを設定するには、ホーム設定(Ubuntuのようなディストリビューション)にdevilspie2という名前のディレクトリを作成します(例:/home/$USERNAME/.config/devilspie2)。

Thunderbird では、thunderbird.lua を作成しましたが、ファイル名は重要ではありません。各アプリケーションごとに異なるファイル名を付けていますが、必要に応じてすべてを 1 つのスクリプト ファイルにまとめることもできます。ログイン時に devilspie2 が自動的に起動するように設定します (例: /home/$USERNAME/.config/autostart/devilspie2.desktop)。

lua スクリプトで使用できるさまざまなオプションに関する優れたページへのリンクを次に示します。https://github.com/gusnan/devilspie2/blob/master/README

注意: スクリプトは実行可能である必要はありません。私のものは 664 ですが、問題なく動作します。私が制御している他のプログラムには、openconnect、pidgin、RecordMyDesktop、timeshift、xeyes、xload、yad などがあります。これらのプログラムには pin_window を使用し、すべてのデスクトップに表示されるようにしています。また、アプリケーションに応じて他のコマンドも使用します。

関連情報