На самом деле, это можно сделать без задержки, но вместо этого с некоторыми хаками. Я написал небольшой скрипт, который позволит вам сделать это без задержки.
#!/bin/bash
######################################################################################
# Simple script to enable users to make screenshots of tooltips/menus/etc... #
# without timers #
######################################################################################
######################################################################################
# Configuration Section (defaults) #
######################################################################################
SCREENSHOT_COMMAND="shutter -s"
# The keys can be found out using xinput test "keyboard name"
MODIFIER_KEY=133 #The <Super> Key (aka. Meta or Windows Key)f
CANCEL_KEY=54 # C
CAPTURE_KEY=27 # R
DAEMON_MODE="false" # change to true if you want to keep the script running after the screenshot was taken
VERBOSE="true" #Change this to any value if you dont want to have notifications
######################################################################################
######################################################################################
# Command parsing #
######################################################################################
function usage {
echo "$0 [-hemrcdn]"
echo "-h prints this message"
echo "-e <command> - execute that command instead of shutter"
echo "-m <int> - The modifier key to use. Use xinput test <keyboar> to find out what is what"
echo "-r <int> - The key to use for capture."
echo "-c <int> - The key used for cancelling (only valid in non daemon mode)"
echo "-d - daemon mode. Will keep on running after a screenshot was taken. to kill the daemon, use \"killall xinput\""
echo "-n - disables notifications"
exit;
}
while getopts "he:m:r:c:dn" flag
do
if [ "$flag" == "h" ]; then
usage
fi
if [ "$flag" == "e" ]; then
SCREENSHOT_COMMAND=$OPTARG
fi
if [ "$flag" == "m" ]; then
CAPTURE_KEY=$OPTARG
fi
if [ "$flag" == "r" ]; then
SCREENSHOT_COMMAND=$OPTARG
fi
if [ "$flag" == "c" ]; then
CANCEL_KEY=$OPTARG
fi
if [ "$flag" == "d" ]; then
DAEMON_MODE="true"
fi
if [ "$flag" == "n" ]; then
VERBOSE="false"
fi
done
######################################################################################
KEYBOARDS=`xinput list | grep "slave" | grep "keyboard" | sed "s/[^a-zA-Z]*\(.*\)id=.*/\1/" | sed "s/[\t ]*$//"`
function run {
MODIFIER_PRESSED="false"
while read line;
do
COMMAND=`echo $line | awk '{print $2;}'`
KEY=`echo $line | awk '{print $3;}'`
if [ "$KEY" == "$MODIFIER_KEY" ]; then
if [ "$COMMAND" == "press" ]; then
MODIFIER_PRESSED="true"
else
MODIFIER_PRESSED="false"
fi
fi
if [ "$KEY" == "$CAPTURE_KEY" -a "$MODIFIER_PRESSED" == "true" -a "$COMMAND" == "press" ]; then
bash -c $SCREENSHOT_COMMAND
if [ "$VERBOSE" == "true" ]; then
notify-send "Taking Screenshot"
fi
if [ "$DAEMON_MODE" == "false" ]; then
quit
fi
fi
if [ "$KEY" == "$CANCEL_KEY" -a "$MODIFIER_PRESSED" == "true" -a "$COMMAND" == "press" -a "$DAEMON_MODE" == "false" ]; then
if [ "$VERBOSE" == "true" ]; then
notify-send "Canceling Screenshot"
fi
quit
fi
done;
}
function quit {
killall -9 xinput
exit
}
if [ "$VERBOSE" == "true" ]; then
notify-send "Screenshot script waiting. Press Meta + R to capture the screenshot"
fi
IFS=$'\n'
for i in $KEYBOARDS
do
unbuffer xinput test "$i" | run &
done
Прежде чем вы сможете реально использовать скрипт (на ubuntu), вам нужно убедиться, что это большой взлом, но он работает и, безусловно, (для меня) более предпочтительным, чем использование задержки. у вас есть и unbuffer. Для этого просто выполните:
sudo apt-get install xinput expect-dev
Затем вы можете запустить скрипт. Сначала запустите его с опцией -h, чтобы просмотреть возможные параметры конфигурации. По умолчанию сценарий будет работать только один раз, и вы должны перезапустить скрипт после каждого скриншота (например, с помощью сочетания клавиш). Это связано с тем, что сценарий может иметь производительность неактивно. Если вы хотите запустить его как «демон», запустите его с опцией -d.
По умолчанию он также будет использовать затвор. Если вы хотите использовать что-то еще, используйте параметр -e, например. script.sh -c "ksnapshot"
По умолчанию кнопка захвата будет Meta + R. вы можете изменить это с помощью параметров конфигурации.
Дайте время процессу входа в систему и посмотрите, как долго он будет длиться:
[root@gislab00207 ~]# time ssh root@ISSLABNTL01
root@isslabntl01's password:
Last login: Fri Oct 4 07:55:03 2013 from 3.60.40.232
[root@ISSLABNTL01 ~]# exit
logout
Connection to ISSLABNTL01 closed.
real 0m45.192s
user 0m0.003s
sys 0m0.005s
You have new mail in /var/spool/mail/root
[root@gislab00207 ~]#
См. выше, потребовалось около 45 секунд для входа в систему -------- ОЧЕНЬ SLOW
Как только вы входите в систему как root, отредактируйте файл sshd_config и измените запись UseDNS, как показано ниже. Здесь я использую sed вместо редактирования файла.
[root@ISSLABNTL01 ~]# grep -i dns /etc/ssh/sshd_config
#UseDNS yes
[root@ISSLABNTL01 ~]# sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
[root@ISSLABNTL01 ~]# grep -i dns /etc/ssh/sshd_config
UseDNS no
[root@ISSLABNTL01 ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
[root@ISSLABNTL01 ~]# exit
Давайте попробуем время для входа в систему и посмотрим, как долго это займет.
[root@gislab00207 ~]# time ssh root@ISSLABNTL01
root@isslabntl01's password:
Last login: Fri Oct 4 07:55:03 2013 from 3.60.40.232
[root@ISSLABNTL01 ~]# exit
logout
Connection to ISSLABNTL01 closed.
real 0m6.192s
user 0m0.003s
sys 0m0.005s
You have new mail in /var/spool/mail/root
[root@gislab00207 ~]#
Посмотрите, как это взяли сейчас 6 секунд, время для ввода пароля.
Это неправильно с установкой Ubuntu.
Чтобы исправить это, вы должны изменить эту строку в /etc/nsswitch.conf:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
И изменить ее для этого:
hosts: files dns
В моем случае проблема может быть решена путем перезапуска systemd-logind:
systemctl restart systemd-logind
Это упоминается в Serverfault.
Я должен делать это регулярно, хотя, и Я не знаю, в чем главная причина проблемы.
Отладочный вывод для ssh в моем случае просто остановился на 30 секунд, пока он был «подключен». Решение оказалось связанным с настройками DNS в моей локальной системе. Предыдущая конфигурация сети оставила за собой фиктивный DNS-сервер в файле /etc/resolv.conf. Замена его на текущий DNS-сервер устранила проблему.
Для меня была изменена система dns до 127.0.0.1, прежде чем это был несуществующий хост.
nano /etc/resolv.conf
И напишите следующее
domain localdomain
search localdomain
(Removed this line) ===> nameserver 10.0.0.1
(Added this line) ===> nameserver 127.0.0.1
Я не так много знаю о среде плаката, как хотелось бы, но для других с аналогичной проблемой это может быть проблемой с sssd, которую мы используем для привязки ldap mojo.
Это происходит со мной:
$ time ssh server.example.com
real 2m0.018s
user 0m0.006s
sys 0m0.004s
Мне нужно получить доступ к серверу (в моем случае через консоль), затем выполните:
service restart sssd
После этого все работает. У меня не было времени отлаживать первопричину, но эта бандада работает для меня.
Я могу решить медленное приглашение пароля с помощью ssh-issue, установив флажок Enable DNS Relay в настройках DHCP на моем маршрутизаторе dlink. Впоследствии соединения с SSH работали в течение секунды.
Network Settings -> Router Settings -> Enable DNS Relay [x]
Конфигурация по умолчанию перенаправляет каждый запрос DNS поставщику. Это было медленно, хотя я был связан с ssh pi@10.0.0.103. Подсказка к решению была запись в /etc/resolv.conf "поиск upc.at", который предоставляется через dhcp.
В руководстве по dlink указано:
When DNS Relay is enabled, DHCP clients of the router will be assigned
the router's LAN IP address as their DNS server. All DNS requests that
the router receives will be forwarded to your ISPs DNS servers.
When DNS relay is disabled, all DHCP clients of the router will
be assigned the ISP's DNS server.
После выпуска dhcp на клиенте и сервере соединение через SSH снова было быстрым. НТН.