Центрировать окно через командную строку

Попробуйте следующее в терминале:

echo "setxkbmap -option terminate:ctrl_alt_bksp" >> ~/.xinitrc

Файл .xinitrc в вашей домашней папке должен читаться каждый раз, когда X запускается либо через startx, либо xinit, а опция мы добавили, чтобы включить «zapping» на сервере.

Для получения дополнительной информации: https://wiki.archlinux.org/index.php/Xorg

15
задан 14 February 2012 в 22:05

4 ответа

Инструмент wmctrl предоставляет доступ к командной строке почти ко всем функциям, определенным в спецификации EWMH (расширенные подсказки диспетчера окон). Его можно использовать, например, для получения информации о диспетчере окон, получения подробного списка рабочих столов и управляемых окон, для переключения и изменения размеров рабочих столов, для того чтобы сделать окна полноэкранными, всегда выше или липкими, а также активировать, (! d0)

Вы можете установить его с помощью

sudo apt-get install wmctrl
. Вы можете получить информацию о своих виртуальных рабочих столах (рабочих пространствах) с помощью wmctrl -d
one@onezero:~$ wmctrl -d
0  * DG: 2720x1536  VP: 0,0  WA: 0,24 1360x744  N/A

И перечислите открытые окна с помощью wmctrl -l. Опция -G показывает геометрию окон:

one@onezero:~$ wmctrl -l
0x02000004  0 onezero Desktop
0x02e00002  0     N/A DNDCollectionWindow
0x02e00003  0     N/A launcher
0x01e00004  0 onezero cairo-dock
0x02e00004  0     N/A panel
0x04800061  0 onezero Transmission
0x02e0000a  0     N/A Dash
0x03a00044  0 onezero arranging windows from the gnu/linux command line with wmctrl ~ Moving to Freedom - Chromium
0x04400006  0 onezero one@onezero: ~
0x04c000e9  0 onezero Google - Mozilla Firefox

Вы можете получить информацию о своих виртуальных рабочих столах (рабочих пространствах) с помощью wmctrl -d

[ f4]

wmctrl -lG

wmctrl -r "Mozilla Firefox" -e <G>,<X>,<Y>,<W>,<H>

<G>: Gravity specified as a number. The numbers are defined in the EWMH specification. The value of zero is particularly
     useful, it means "use the default gravity of the window".
<X>,<Y>: Coordinates of new position of the window.
<W>,<H>: New width and height of the window.

Вы можете указать окно, указав его название или частичное название после -r. -e для перемещения и изменения размера

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700

Итак, чтобы переместить окно в верхний левый угол и сделать его шириной 1000 пикселей на 700, вы должны использовать 0,0,0,1000, 700

Чтобы изменить / изменить размер. Для этого я сначала использовал обход «unmaximizing», используя опцию -b

wmctrl -r «Mozilla Firefox» -b add, maximized_vert, maximized_horz

one@onezero:~$ wmctrl -r "Mozilla Firefox" -b add,maximized_vert,maximized_horz
[d28 ] wmctrl -r «Mozilla Firefox» -b remove, maximized_vert, maximized_horz

enter image description here

The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"

Вещи, которые вам нужно понять 1st

thats - мое разрешение экрана, так что x = 1360 & amp; y = 786

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768

Выравнивание окна влево-вправо экрана

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768

Выравнивание окна вправо до половины экрана

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768

Выравнивание окна с center of screen 1360/4 = 340

enter image description here [!d33]

Манипулировать его с настройками экрана

26
ответ дан 25 May 2018 в 14:16

, который работает с текущим активным окном

IFS='x' read screenWidth screenHeight < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)

width=$(xdotool getactivewindow getwindowgeometry --shell | head -4 | tail -1 | sed 's/[^0-9]*//')
height=$(xdotool getactivewindow getwindowgeometry --shell | head -5 | tail -1 | sed 's/[^0-9]*//')

newPosX=$((screenWidth/2-width/2))
newPosY=$((screenHeight/2-height/2))

xdotool getactivewindow windowmove "$newPosX" "$newPosY"
5
ответ дан 25 May 2018 в 14:16
  • 1
    Для этого требуется bash или zsh для запуска, обычная sh не будет работать. – wingedsubmariner 19 May 2016 в 05:58
  • 2
    Работы – Ronan Jouchet 10 August 2017 в 17:41
  • 3
    Нашел решение моей проблемы на этой теме askubuntu . Привлекает также вызов wmctrl, приветствуем лучшие решения. TL; DR: вызывать wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horz перед окончательным вызовом xdotool getactivewindow windowmove. – Ronan Jouchet 10 August 2017 в 17:50

Если кому-то нужен фрагмент кода для копирования / вставки для этого, вот один из них:

winname='foo'
IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
read wx wy ww wh < <(wmctrl -lG | grep $winname | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
wmctrl -r $winname -e 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh

Замените foo на имя окна, которое вы хотите центрировать в первой строке,

Объяснение (разбивка в форме примерного сеанса консоли):

Получение размеров экрана

llama@llama:~$ xdpyinfo | grep dimensions
  dimensions:    1920x1080 pixels (508x285 millimeters)
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*'
1920x1080
x
508x285
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1
1920x1080
llama@llama:~$ IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
llama@llama:~$ echo $sw $sh
1920 1080

Получение размеров экрана

llama@llama:~$ wmctrl -lG | grep foo
0x00a0000c  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]*//;'
  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]*//;'
 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;'
1143 505  722  475  
llama@llama:~$ read wx wy ww wh < <(wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
llama@llama:~$ echo $wx $wy $ww $wh
1143 505 722 475

Перемещение окна

llama@llama:~$ echo 0,foo,bar,$ww,$wh
0,foo,bar,722,475
llama@llama:~$ echo 0,$(($sw/2)),bar,$ww,$wh                                    
0,960,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),bar,$ww,$wh
0,599,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh
0,599,303,722,475
3
ответ дан 25 May 2018 в 14:16

Большинство приложений должны соблюдать параметр -geometry при запуске (некоторые предпочитают -geometry, попробуйте второе, если первое не работает для вас):

gnome-terminal --geometry 80x25+100+100

Параметр геометрии имеет этот form:

WIDTHxHEIGHT+XOFF+YOFF

Вы можете оставить ненужные части:

gnome-terminal --geometry +20+50 #No size, just offsets

Для получения дополнительной информации:

man X

, затем нажмите «/» и выполните поиск для технических характеристик GEOMETRY

или см. здесь: http://www.cotse.com/dlf/man/xwindows/geometry.htm

0
ответ дан 25 May 2018 в 14:16

Другие вопросы по тегам:

Похожие вопросы: