Ekran çözünürlüğünü ayarlayın Çoklu monitör ayarlarında bir pencere açık


0

3 monitörüm var (biri 1080p, diğeri 900p). Etkin bir pencerenin açık olduğu ekranın çözünürlüğünü alması gereken bir pencere döşeme bash komut dosyasını düzenliyorum.

https://superuser.com/a/992924 bunu yapmak için bir komut dosyası sunar ancak bir hata döndürür. xdotool yalnızca birincil ekranın çözünürlüğünü döndürür xdpyinfo ve xwininfo 3 ekranın toplam çözünürlüğünü döndürür

Herhangi bir çözüm var mı?

Yanıtlar:


1

Ne istediğinizi tam olarak bilmiyorum, ancak aşağıdaki komut kabuğunuzun konumunu ve boyutlarını alacaktır:

$ wmctrl -plG|grep -E "^[^ ]+ +[^ ]+ $PPID "
0x0560000b  1 2481   10   47   1352 386  Lenovo-Ubuntu Terminal

Bu basittir, çünkü yalnızca ilk kabuktan çalışır; Bir alt kabuktan çalışmak için ihtiyacınız olacak:

$ wmctrl -plG|grep -E "^[^ ]+ +[^ ]+ $(pid=$PPID; until [ "`ps -p $pid -o comm= | grep -i term`" ]; do pid=`ps -p $pid -o ppid=`; done; echo $pid) "
0x0560000b  1 2481   10   47   1352 386  Lenovo-Ubuntu Terminal

Bu, terminalinizde termadının bulunduğunu varsayar : terminalinizi tanımlamak için farklı bir yola ihtiyaç duyabilirsiniz (uzun satır için üzgünüm, ancak çoğu arama dizgisindedir).

Bağlanan monitörlerin boyutlarını yazarak bulabilirsiniz:

$ xrandr | grep ' connected'
LVDS1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
HDMI1 connected 1920x1080+1366+0 (normal left inverted right x axis y axis) 708mm x 398mm

Boyutlar belirlendikten sonra, +0+0ve +1366+0global bir ekran içinde her bir monitörün X ve Y ekseni sapmaları olan.

Terminalin görüntülendiği wmctrlmonitörü bulmak için, X ekseni değerinin altında olan en sağ monitörü bulmak için X eksenini ('+' işaretleri arasında) çıkıştaki dördüncü alanla karşılaştırmanız gerekir . Terminalin X konumu.

Ben gösterdiğin örneklerde, terminalin X-pozisyonu 10ve daha fazla olan, 0X-ekseni, LVDS1ancak daha az 1366X ekseni, HDMI1yani, terminal ile ilgili olan LVDS1, boyutları bu nedenle 1366x768.

Buna karşılık, wmctrldiğer ekrandaki bir terminaldeki komut şunları verdi:

0x0740000f 1 12147 1466 46 2356 966 Lenovo-Ubuntu xterm

İşte 1466her ikisinden de büyük 0ve 1366en sağdaki monitör HDMI1boyutlarla birlikte 1920x1080.

Bir terminalin iki monitörü kaldırabileceğine dikkat edin: açıkladığım şey bunların en solunu bulacak, ancak bu durumda farklı bir şey yapmak istiyorsanız diğer bazı alanları kontrol edebilirsiniz.

Karşılaştırmaları yapmak için bazı karmaşık komut dosyalarına ihtiyacınız olacak ve bunu sizin için yapmayı düşünmüyorum, ancak başlamak için yeterli bilgiye sahip olduğunuzu umuyorum.


0

AFH tavsiyesinin ardından ve http://www.doknowevil.net/tag/multiple-monitors/ ve https://askubuntu.com/questions/207685/is-it-possible-to-place-windows-with-keyboard'a dayalı -shortcuts-in-xfce , 3 ekran ayarım yatay değil ve birincisi farklı çözünürlükte olduğundan biraz karmaşık olan bu komut dosyasıyla geldim.

#!/bin/bash
# rsizes the window to full height and 50% width and moves into upper right corner


function getActiveWindowID
{
activeWinID=$(xdotool getactivewindow )
echo $activeWinID
}

function getActiveWindowHorizontalPosition
{
activeWinID=$(getActiveWindowID)
xPosLine=$(xwininfo -id $activeWinID | grep "Absolute upper-left X")
xPos=${xPosLine:25}
echo $xPos
}

function getActiveWindowVerticalPosition
{
activeWinID=$(getActiveWindowID)
yPosLine=$(xwininfo -id $activeWinID | grep "Absolute upper-left Y")
yPos=${yPosLine:25}
echo $yPos
}

function getActiveWindowWidth
{
activeWinID=$(getActiveWindowID)
xWidthLine=$(xwininfo -id $activeWinID | grep "Width")
xWidth=${xWidthLine:8}
echo $xWidth
}

function getActiveWindowHeight
{
activeWinID=$(getActiveWindowID)
xHeightLine=$(xwininfo -id $activeWinID | grep "Height")
xHeight=${xHeightLine:8}
echo $xHeight
}

function getActiveWindowCurrentMonitorHorizontal
{

activeWinID=$(getActiveWindowID)
xPos=$(getActiveWindowHorizontalPosition)
yPos=$(getActiveWindowVerticalPosition)



if [ $xPos -ge 1920 ] || [ $yPos -le 900 ]; then


monitorwidth=1440
echo $monitorwidth

else     
monitorwidth=1920
echo $monitorwidth


fi

}

function getActiveWindowCurrentMonitorVertical
{

activeWinID=$(getActiveWindowID)
xPos=$(getActiveWindowHorizontalPosition)
yPos=$(getActiveWindowVerticalPosition)




if [ $xPos -ge 1920 ] || [ $yPos -le 900 ]; then


monitorheight=873 
echo $monitorheight 
else     

monitorheight=1054
echo $monitorheight

fi

}
function getActiveScreenDistHorizontal
{

activeWinID=$(getActiveWindowID)
xPos=$(getActiveWindowHorizontalPosition)
yPos=$(getActiveWindowVerticalPosition)




if [ $xPos -ge 1920 ]; then
activescreendisthorizontal=1920
echo $activescreendisthorizontal
else
if [ $yPos -le 900 ]; then
activescreendisthorizontal=480
echo $activescreendisthorizontal
else
activescreendisthorizontal=0
echo $activescreendisthorizontal
fi
fi  
}

function getActiveScreenDistVertical
{

activeWinID=$(getActiveWindowID)
xPos=$(getActiveWindowHorizontalPosition)
yPos=$(getActiveWindowVerticalPosition)




if [ $xPos -ge 1920 ]; then
activescreendistvertical=438
echo $activescreendisvertical
else
if [ $yPos -le 900 ]; then

activescreendistvertical=0
echo $activescreendistvertical
else
activescreendistvertical=900
echo $activescreendistvertical
fi  
fi  
}

#define MARGINS IN PIXELS
TOPMARGIN=0
RIGHTMARGIN=0
LEFTMARGIN=0
BOTTOMMARGIN=0
# get width of screen and height of screen
SCREEN_WIDTH=$(getActiveWindowCurrentMonitorHorizontal)
SCREEN_HEIGHT=$(getActiveWindowCurrentMonitorVertical)

xPos=$(getActiveWindowHorizontalPosition)
yPos=$(getActiveWindowVerticalPosition)



AVAILABLE_WIDTH=$(( $SCREEN_WIDTH - $RIGHTMARGIN -$LEFTMARGIN))
AVAILABLE_HEIGHT=$(( $SCREEN_HEIGHT - $TOPMARGIN - $BOTTOMMARGIN))

# new width and height
W=$(( $AVAILABLE_WIDTH / 2))

H=$(( $AVAILABLE_HEIGHT))


# Available coordinates
activescreendisthorizontal=$(getActiveScreenDistHorizontal)
activescreendistvertical=$(getActiveScreenDistVertical)

XLEFT=$(($activescreendisthorizontal+$LEFTMARGIN))
XRIGHT=$(($XLEFT+$LEFTMARGIN+$W ))
YTOP=$(($activescreendistvertical+$TOPMARGIN))
YBOTTOM=$(( $TOPMARGIN+$H ))

# Actual new coordinates
X=$XRIGHT
Y=$YTOP

wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz && wmctrl -r 
:ACTIVE: -e 10,$X,$Y,$W,$H                    
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.