Я также задал этот вопрос о переполнении стека и получил хороший ответ, который я отметил как правильный и проголосовал вверх: https://stackoverflow.com/a/26060527/1707904
Это относится и к компиляции. Есть пара способов получения этой информации:
wnckprop --xid=$(xdotool getactivewindow)
Иначе, вы можете просто смешать Абсолютное значение, которое вы получаете от xwininfo, с размером декораций, которые доступны с помощью:
xprop _NET_FRAME_EXTENTS -id $(xdotool getactivewindow)
К вашему сведению, если вы хотите получить полный размер кадра, включая область ввода вокруг окна, вы можете использовать
xwininfo -frame
После экспериментов, я лучше понимаю, к чему относится "область ввода" в Ubuntu. Так как размер границы по умолчанию равен 0, вокруг окна есть область 10px, где вы можете захватить окно для изменения размера. Это может иметь и другие цели, но область ввода в основном действует как невидимая 10-пиксельная граница. Таким образом, Absolute из xwininfo дает внутреннее окно, в то время как xwininfo -frame дает все окно, включая панель заголовков и дополнительные 10px по всему периметру (если область ввода 10px). xprop... дает только размер декораций, не включая область ввода. Таким образом, все 3 команды необходимы для получения полного представления о геометрии окна.
Вот код, который я использовал (он игнорирует невидимую область ввода):
eval $(xwininfo -id "$aw" |
sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
-e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
-e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
-e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" )
if [ "$entire" = true ]
then
extents=$(xprop _NET_FRAME_EXTENTS -id "$aw" | grep "NET_FRAME_EXTENTS" | cut -d '=' -f 2 | tr -d ' ')
bl=$(echo $extents | cut -d ',' -f 1) # width of left border
br=$(echo $extents | cut -d ',' -f 2) # width of right border
t=$(echo $extents | cut -d ',' -f 3) # height of title bar
bb=$(echo $extents | cut -d ',' -f 4) # height of bottom border
let x=$x-$bl
let y=$y-$t
let w=$w+$bl+$br
let h=$h+$t+$bb
fi
Я хочу отключить порождение tty по требованию systemd и запустить ttys [...] во время загрузки.
Это довольно просто. X-сервер захватывает виртуальный терминал ядра до того, как на нем запустится какая-либо служба входа в систему, так как ваши службы входа в систему запускаются только по требованию. Вы хотите выключить это, и вместо того, чтобы запускать службы входа по требованию, все они должны быть явно запущены при загрузке, так, как это было раньше.
logind
делает моральный эквивалент systemctl start autovt@ttyN.service
при переключении на виртуальный терминал ядра N. Чтобы выключить это, просто установите NAutoVTs=0
, как написано в документации. getty@.service
на каждой клемме обычным способом:для i в 1 2 3 4 6 7 8 9 10 11. делать systemctl включить getty@tty$i.service done
Единственная проблема, с которой столкнулась одна из может - это то, что старые версии systemd не могут включить инстанцирование шаблонов, и вы должны построить символическую ссылку вручную:
for i in 1 2 3 4 6 7 8 9 10 11 do ln -s -f -- /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty$i.service done
Заставляя ваш X-сервер(ы) хорошо играть с этим, я оставлю это на ваше усмотрение. ☺