web-dev-qa-db-ja.com

コマンドラインを使用して、ウィンドウサイズと画面上のアプリケーションの場所を設定する方法

Firefoxウィンドウを特定のサイズで開いて、シェルコマンドを使用して画面上の位置を指定します。次に例を示します。

firefox myfile.html size 800x600 location bottom-left

そのようなコマンドはありますか?

36
alwbtc

Yokai によるコミュニティバージョンの回答は、 Rudolf Olah が提供する例を組み込んでいます。


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

  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

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

26
roaima

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

#!/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にはいくつかの相互運用性の問題があります(他のインスタンスが実行されていないなど)が、それでうまくいくはずです。

20
Bobby

過去に、JavaScriptでウィンドウサイズを設定し、必要なページにリダイレクトするHTMLドキュメントを作成しました。それは愚かなハックですが、ちょっと、それは動作します。

3
bahamat

私はいつもこれをします。ただし、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を使用して、すべてのデスクトップに表示されるようにし、アプリケーションに応じて他のコマンドを表示します。

2
Karl Pearson

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

firefox -width 200 -height 500
1
sebpiq

これはシェルコマンドでのみ可能だとは思いません。ウィンドウマネージャーとは関係がないためです。
私は wmctrl および devilspie のことを聞いたことがあります。しかし、あなたがあなたの例で書いたのと同じくらい簡単にそれを達成する方法があるとは思えません。

1
32bitfloat

xdotoolアプローチは、かなり単純なアプローチです。私は3台のモニター(1つはLCD TV、通常は日中オフ、夕方はオン)であり、デスクトップ環境(xfce4)はオン/オフ状態に応じて画面を再配置します。私の.bashrcから実行されるスクリプト(起動スクリプトで呼び出されます)を作成しましたが、以下のスクリプトを独立した起動スクリプトとして追加するか、crontabから実行できます。

Firefox Libraryウィンドウを開くたびに、モニター2(中央のメインウィンドウ)で開くので、そのウィンドウを見つけてサイズ変更し、フルスクリーンで左のモニターに移動するxdotoolコマンドを追加しました。

$(xdotool search --onlyvisible --name library)はウィンドウIDを見つけることに注意してください(例:33576352)を直接使用します。

[より単純なバージョンの場合、「lockfile」のものを削除し、while true ...ループ。]

#!/ bin/bash 
 
#/mnt/Vancouver/Programming/scripts/run_every_10_sec.sh

#起動スクリプトとして実行(10秒ごとに1回、継続的に実行されます)。
#〜/ .bashrcに追加されます(低優先度でバックグラウンドで継続的に実行されます):
#/ mnt/Vancouver/Programming/scripts/Nohup .sh "Nice -n 19 /mnt/Vancouver/Programming/scripts/run_every_10_sec.sh"&
 
#手動で実行するには(最後に「終了」アンパサンドがあることに注意):
 #pwd 
#/mnt/Vancouver/Programming/scripts
# ./run_every_10_sec.sh&
 
#このスクリプトはバックグラウンドで実行されるため、次のものが必要です。それを手動で殺す;例:
#pgrep -l run _ 
#25739 run_every_10_se 
#kill -9 25739 
 
#--------- -------------------------------------------------- ----------------- 
#このプログラムの1つのインスタンスのみを許可
 
#http://unix.stackexchange.com /questions/150778/prevent-a-second-instance-of-my-software-from-starting

#別のインスタンスが見つかった場合は起動を中止します
 pidof "/ mnt/Vancouver/Programming/scripts/run_every_10_sec.sh ">/dev/null && {
 echo申し訳ありません。許可されるインスタンスは1つだけです。
 exit 
} 
 
#---------------------- -------------------------------------------------- ---- 
#LOCKFILE 
 
 #https://stackoverflow.com/questions/185451/quick-and-dirty-way-to-ensure-only-one- instance-of-a-Shell-script-is-running-at/185473#185473 
 
#このスクリプトを手動で強制終了または再実行する場合は、$ LOCKFILEが削除されていることを確認してください。
 rm -f /tmp/run_every_10_sec_l​​ock.txt

LOCKFILE=/tmp/run_every_10_sec_l​​ock.txt

if [-e $ {LOCKFILE}] && kill -0 `cat $ {LOCKFILE}`;次に、
 echo "already running" 
 exit 
 fi 
 
#終了時にロックファイルが削除されていることを確認してから、それを要求します
 trap "rm -f $ {LOCKFILE}; exit" INT TERM EXIT 
 echo $$> $ {LOCKFILE} 
 
#実行:
 while true 
 do 
#ディスプレイを並べ替えます:
 /mnt/Vancouver/Programming/scripts/displays.sh
#----------- -------------------------------------------------- -
#サイズ変更、Firefoxの「ライブラリ」ウィンドウの移動:
 xdotool windowmove $(xdotool search --name library)0 0 
 xdotool windowsize $(xdotool search --name library) 1920 1080 
#上記と同じ:
#PID = $(xdotool search --name library)
#xdotool windowmove $ PID 0 0 
#xdotool windowsize $ PID 1920 1080 
#----------------------------------------- -  -  -  -  -  -  -  -  -  - -
    # 注意! Linux、xdotool&wmctrl、
の既知の長年のバグにより、[最大化されたウィンドウでは動作しない[おそらく
が原因である。ウィンドウ(少し)と
#スクリプトが起動するのを待ちます... 
#--------------------- ----------------------------------------- 
睡眠10 
完了
 
 rm -f $ {LOCKFILE} 
0
Victoria Stuart