Re: Странная проблема
> а) не переключаться в системную консоль. Единственное зачем мне это
> бывает нужно делать, это если какая-нибудь графическая программа
> (например файрфокс) начинает не просто тормозить, а блокировать весь
> X-сервер, тогда зайти и прибить.
А она прямо все Иксы блокирует, или просто захватывает на себя ввод?
Во втором случае, вероятно, ее совершенно ни к чему было бы прибивать, когда можно просто освободиться от захвата. Для этого даже сочетание клавиш назначено из коробки: <C-A-kp-divide>, где <kp-divide> — это косая черта, которая на цифровой клавиатурке.
Только сам механизм по-умолчанию отключен, ибо именно на захвате ввода работают иксовые блокировщики экрана. Но его можно временно включить, а потом как-нибудь выключить. Например, таким костылем:
#!/bin/bash
# xkb-ungrab --- release keyboard block
# Force ungrab is mapped to <C-A-kp-divide> by default, while killing
# grabbing client - to <C-A-kp-multiply>. Yet they have no use until
# underlying machinery is explicitly allowed by turning on
# 'grab:break_actions' option. It must not be turned on however,
# since it allows to trespass screen lockers with ease (most of them)
# or at least to crash user session (SDDM).
hash setxkbmap xdotool xkbcomp fgrep || exit 1
xkbmap-save ()
{
declare -g -A xkbmap
while IFS+=':' read key value; do
xkbmap[$key]=$value
done < \
<(setxkbmap -query)
}
xkbmap-restore ()
{
local -a opts
for o in rules model layout variant; do
opts+=("-$o" "${xkbmap[$o]}")
done
opts+=(-option '' -option "${xkbmap[options]}")
setxkbmap "${opts[@]}"
}
[[ $DISPLAY ]] || DISPLAY=':0'
export DISPLAY
xkbmap-save
setxkbmap -option 'grab:break_actions'
xdotool key 'XF86Ungrab' # 'XF86ClearGrab' to kill client that grabbed kbd
xkbmap-restore
if [[ -f "$HOME/.xkb" && -d "$HOME/.xkb.d/" ]]; then
xkbcomp -I"$HOME/.xkb.d" "$HOME/.xkb" "$DISPLAY"
fi
fgrep -q 'xfree86(grab_break)' < <(xkbcomp "$DISPLAY" -) \
&& printf >&2 $"Something went wrong: FORCE UNGRAB IS STILL ALLOWED\n"
Оно хотя и редко бывает нужно, но узнать, нет ли более чистого решения, было бы весьма интересно. Таким мог быть, к примеру, вызов блокировщика экрана через тот же механизм, что и снятие захвата.
Reply to: