systemd с 10 ttys и Рабочим столом на Ctrl+Alt+F5

Я также задал этот вопрос о переполнении стека и получил хороший ответ, который я отметил как правильный и проголосовал вверх: 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

1
05.10.2014, 22:39
1 ответ

Я хочу отключить порождение tty по требованию systemd и запустить ttys [...] во время загрузки.

Это довольно просто. X-сервер захватывает виртуальный терминал ядра до того, как на нем запустится какая-либо служба входа в систему, так как ваши службы входа в систему запускаются только по требованию. Вы хотите выключить это, и вместо того, чтобы запускать службы входа по требованию, все они должны быть явно запущены при загрузке, так, как это было раньше.

  • logind делает моральный эквивалент systemctl start autovt@ttyN.service при переключении на виртуальный терминал ядра N. Чтобы выключить это, просто установите NAutoVTs=0, как написано в документации.
  • Для того, чтобы systemd явно запускал все службы, просто включите экземпляры шаблона 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-сервер(ы) хорошо играть с этим, я оставлю это на ваше усмотрение. ☺

Дальнейшее чтение

0
28.01.2020, 01:53

Теги

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