WMCTRL, не работающий после стартового xfce4-терминала

[115923] Также существует расширение GNU до [116283]sed[116284], которое условно вилкирует:

e


Эта команда позволяет вводить данные из команды оболочки в пространство шаблона. Если была произведена замена, то выполняется команда, находящаяся в пространстве шаблона, и пространство шаблона заменяется его выводом. Если выполняемая команда содержит символ NUL, то результат не определяется.

1
02.11.2014, 15:43
3 ответа

Оператор Concatenation && приводит к тому, что вторая команда не выполняется до первой команды ( XFCE4-терминала ) выходит (и только в том случае, если состояние выхода указывает на успех, так как это логический оператор короткого замыкания).

Вы должны получить поведение, которое вы ожидаете, если вы измените && ; ; ; ; ; или просто поместите команду wmctrl на отдельной строке вашего скрипта.

3
27.01.2020, 23:17

Я всегда использовал STTY -ECHO , чтобы выключить эхо, затем прочитать и впоследствии делать STTY ECHO (Подробнее, просмотра человека STTY - то есть Человек Фитт ). Это более полезно из перспективы программистов, когда вы можете отключить эхо, а затем прочитать пароль из языка программирования, такого как Java, C (++), Python и т. Д. С их стандартными stdin "читателями."

в bash Использование может выглядеть так:

echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd

Python, например, выглядел бы:

from sys import stdout
from os import system as term

uname = raw_input("USERNAME: ") # read input from stdin until [Enter] in 2
stdout.write("PASSWORD: ")
term("stty -echo") # turn echo off
try:
    passwd = raw_input()
except KeyboardInterrupt: # ctrl+c pressed
    raise SystemExit("Password attempt interrupted")
except EOFError: # ctrl+d pressed
    raise SystemExit("Password attempt interrupted")
finally:
    term("stty echo") # turn echo on again

print "username:", uname
print "password:", "*" * len(passwd)

Мне пришлось сделать это много раз в Python, поэтому я знаю это довольно хорошо с этой перспективы. Это не очень трудно перевести на другие языки, хотя.

-121--22210-

Вы запускаете WMCTRL непосредственно после того, как выходит из XFCE4-терминала . Но если уже есть открытый экземпляр терминала XFCE, XFCE4-терминал ставит в фоновом режиме и немедленно возвращает командную строку, пока все еще в процессе настройки фактического экрана терминала. Так что к тому времени WMCTRL запускается окно с заголовком RD , возможно, еще не будет там.

Если вам не нужно вводить команду, как в примере с && , то WMCTRL запускается слишком быстро. В первом примере печатания или выбора из истории достаточно задержки, чтобы иметь окно терминала с правильным заголовом доступным.

Если вы вырезаете и вставьте два входа командной строки с первого примера, вы, вероятно, сможете также столкнуться с проблемой.

Вы должны поставить команду Sleep перед вызовом WMCTRL . Вы можете экспериментировать со продолжительностью, 1 секунду должно быть достаточно, поскольку заголовок терминала будет установлен до начала оболочки, необходимо обработать его файлы запуска. (Если вы запускаете Firefox / Chrom с URL-адресом, который нужно извлечь, ожидание ожидаемого заголовка может занять несколько секунд, и он может никогда не прийти, когда появятся сетевые ошибки).

Чтобы получить равномерное поведение, запустить XFCE4-терминал на заднем плане на заднем плане, чтобы он не заблокировал, даже если это первый причт первый экземпляр.

xfce4-terminal --hide-menubar --hide-borders --hide-toolbars --title=dt &
sleep 1
wmctrl -r dt -e 0,10,10,720,720
2
27.01.2020, 23:17

Ответ Антона объясняет, что делает на. Используя WMCTRL , чтобы изменить размер или переместить окно после того, как факт будет проблематичным, хотя; Вам нужно полагаться на таймера, поэтому окно появится в неправильном положении, затем переместить (или, если машина действительно медленная, окно не будет двигаться, потому что WMCTRL работает слишком рано ). Кроме того, у вас может быть еще одно окно с тем же названием (если вы не генерируете гарантированные-уникальные названия, например со случайной строкой или временем метки).

К счастью XFCE4-терминал имеет возможность установить его начальную позицию и размер. Следует стандартным синтаксисом геометрии X11 . Используйте его вместо звонка WMCTRL . Обратите внимание, что размер выражены в клетках символов, а не в пикселях.

xfce4-terminal --geometry 80x40+10+10 --hide-menubar --hide-borders --hide-toolbars --title=dt
0
27.01.2020, 23:17

Теги

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