Хотя я должен сказать, что это «требование» звучит довольно странно, нет ничего невозможного. Вы можете достичь этого с помощью небольшого сценария, как я покажу ниже.
Прежде всего, нам нужно установить некоторые инструменты , Это xdotool для типизации эмуляции и управления окнами и byzanz для видеозаписи. Установите их, используя:
sudo apt install xdotool byzanz
Затем скопируйте код в конце этого ответа и сохраните его как скрипт bash на вашем компьютере, например. как ~/bin/typerec. Если вы сохраните его в папке на $PATH, вы сможете выполнить его без указания его пути. Не забудьте сделать его исполняемым позже, используя chmod +x PATH/TO/SCRIPT.
Теперь, чтобы записать ввод определенного файла, сначала откройте свою цель редактор, в который мы будем печатать. Удостоверьтесь, что у него есть какая-либо функция «автоматического отступа», иначе отступы введенного кода будут испорчены!
Затем запустите мой скрипт, например. от терминала. Правильный синтаксис -
typerec INPUT_FILE OUTPUT_FILE [DELAY]
, где INPUT_FILE - путь к текстовому файлу кода, а OUTPUT_FILE - путь выходного файла, в котором должна храниться запись. Он должен иметь расширение, принятое byzanz, то есть один из gif, webm, ogg, ogv, flv, byzanz (мои рекомендации выделены полужирным шрифтом). Аргумент DELAY не является обязательным и устанавливает задержку между двумя нажатиями клавиш в миллисекундах. По умолчанию 20, если не указано, я рекомендую не идти ниже 5.
Пример:
typerec /path/to/my/code.py ~/Videos/code.webm 100
Ваш курсор мыши изменится на какие-то перекрестие (не видно на скриншоте ), и вы получите пузырь уведомлений с просьбой щелкнуть окно целевого редактора:
Выполняйте, как вам сказали, но gif ! Если вы не хотите запускать запись, немедленно нажмите Ctrl + C, в то время как терминал все еще сфокусирован и перед щелчком в любом месте.
Внимание! Как только вы нажмете в любом месте, сценарий будет сфокусирован на этом окне и начнет эмулировать все нажатия клавиш, чтобы ввести ваш входной документ через секунду. Это не остановить! Как только это началось, не прикасайтесь к клавиатуре или не щелкните нигде, пока она не закончится! В противном случае ваш вход будет смешиваться с эмулированным входом и может вызвать непреднамеренные действия, такие как открытие / фокусировка других окон или активация быстрых клавиш. Вы должны подождать, пока он не остановится самостоятельно!Вот и все. После завершения скрипта (обратите внимание, что после завершения записи ему может потребоваться еще несколько секунд для рендеринга и сохранения видео), вы можете открыть записанное видео и проверить результаты.
#!/bin/bash
THIS="$(basename "$0")"
INPUT_FILE="$1"
OUTPUT_FILE="$2"
DELAY="${3:-20}"
show_usage() {
echo " Usage: $THIS INPUT_FILE OUTPUT_FILE [DELAY]"
echo "where INPUT_FILE is the text file with the content to be typed"
echo "and OUTPUT_FILE is where the recorded video shall get saved."
echo "You can set the DELAY between keystrokes in ms (default 20)."
echo "Note that OUTPUT_FILE will be overwritten if it exists already."
echo "It must have one of the extensions {gif|webm|ogg|ogv|flv|byzanz}."
exit 1
}
if [[ -z "$INPUT_FILE" || ! -r "$INPUT_FILE" ]] ; then
echo "Missing INPUT_FILE argument or file is not existing or readable!"
show_usage
fi
if [[ -z "$OUTPUT_FILE" ]] ; then
echo "Missing OUTPUT_FILE argument!"
show_usage
fi
if [[ ! "$DELAY" -gt 0 ]] ; then
echo "Invalid argument for DELAY, must be a number > 0 or omitted."
show_usage
fi
notify-send -i "media-record" "$THIS" "Please select your target editor window."
eval $(xdotool selectwindow getwindowgeometry --shell)
if [[ -z "$WINDOW" || -z "$X" || -z "$Y" || -z "$WIDTH" || -z "$HEIGHT" ]]; then
echo "Failed to obtain all required target window information. Aborting."
exit 2
fi
TYPE_COMMAND="xdotool windowactivate --sync \"$WINDOW\" \
getactivewindow \
windowfocus --sync \
sleep 1 \
type --clearmodifiers --delay "$DELAY" \
--file <( tr \\\\n \\\\r < \"$INPUT_FILE\" )"
byzanz-record -e "bash -c '$TYPE_COMMAND'" \
-x "$X" -y "$Y" -w "$WIDTH" -h "$HEIGHT" \
"$OUTPUT_FILE" &&
echo "Recording screencast and saving to $OUTPUT_FILE finished successfully."
[d36 ] Если вы предпочитаете не сохранять сценарий в любом месте, однострочный, который вы можете просто вставить в терминал, который в основном делает то же самое (но опускает входные параметры и проверки, записывая file.txt как typerec.gif с задержкой 20 мс ) ниже. Вы отвечаете за его редактирование, чтобы использовать правильные пути и убедиться, что все там правильно.
( eval $(xdotool selectwindow getwindowgeometry --shell) ; byzanz-record -e "bash -c 'xdotool windowactivate --sync $WINDOW getactivewindow windowfocus --sync sleep 1 type --clearmodifiers --delay 20 --file <( tr \\\\n \\\\r < file.txt )'" -x $X -y $Y -w $WIDTH -h $HEIGHT typerec.gif )
Вы используете sudo для получения корневой оболочки. Это не означает, что вы включили учетную запись root.
Чтобы включить регистрацию root, вы должны установить пароль для root:
sudo passwd root
Затем вам нужно отредактировать свой [ f5]
sudo editor /etc/ssh/sshd_config
Измените
PermitRootLogin prohibit-password
на
PermitRootLogin yes
Выйдите из редактора и перезапустите sshd с помощью
sudo systemctl restart openssh-server
Обратите внимание, что это не рекомендуется. Я не могу думать о каких-либо причинах, по которым вам нужен root-доступ через ssh. Команды могут быть добавлены с помощью sudo и sudo для использования без пароля. Копии файлов? Обычно вы можете изменить разрешения адресата, чтобы вам не нужно было быть root.
Вы используете sudo для получения корневой оболочки. Это не означает, что вы включили учетную запись root.
Чтобы включить регистрацию root, вы должны установить пароль для root:
sudo passwd root
Затем вам нужно отредактировать свой sshd_config
sudo editor /etc/ssh/sshd_config
Измените
PermitRootLogin prohibit-password
на
PermitRootLogin yes
Выйдите из редактора и перезапустите sshd с помощью
sudo systemctl restart openssh-server
Обратите внимание, что это не рекомендуется. Я не могу думать о каких-либо причинах, по которым вам нужен root-доступ через ssh. Команды могут быть добавлены с помощью sudo и sudo для использования без пароля. Копии файлов? Обычно вы можете изменить разрешения адресата, чтобы вам не нужно было быть root.
Вы используете sudo для получения корневой оболочки. Это не означает, что вы включили учетную запись root.
Чтобы включить регистрацию root, вы должны установить пароль для root:
sudo passwd root
Затем вам нужно отредактировать свой sshd_config
sudo editor /etc/ssh/sshd_config
Измените
PermitRootLogin prohibit-password
на
PermitRootLogin yes
Выйдите из редактора и перезапустите sshd с помощью
sudo systemctl restart openssh-server
Обратите внимание, что это не рекомендуется. Я не могу думать о каких-либо причинах, по которым вам нужен root-доступ через ssh. Команды могут быть добавлены с помощью sudo и sudo для использования без пароля. Копии файлов? Обычно вы можете изменить разрешения адресата, чтобы вам не нужно было быть root.
Здесь может быть несколько причин.
Во-первых, многие дистрибутивы Linux приходят или, по крайней мере, предлагают заблокировать пользователя root из ssh. Это связано с тем, что каждая система поставляется с root, и это упрощает переборку машины, если вы знаете о пользователе.
В противном случае вам нужно понять, что каждый пользователь имеет свой собственный пароль, и он является паролем этого пользователя, а записи, найденные для sudo в /etc/sudoers, - которые позволяют пользователю успешно выполнять команду с помощью sudo.
Чтобы уточнить, когда вы используете эту команду, вы используете пароль USER:
sudo su -i
sudo проверяет, разрешено ли вам запускать эту команду, а также запрашивает пароль пользователя.
При входе в систему вы снова используете этот пароль пользователя. Маловероятно, и плохая практика заключается в том, чтобы ваш ПОЛЬЗОВАТЕЛЬ и ваш корневой аккаунт делили пароли. В этом случае, поскольку вы знаете пароль USER, вы должны сделать следующее:
ssh USER@myserver
sudo su -
Здесь вы получаете доступ к системе, используя учетную запись USER, и известный пароль, а затем переходите в root. Это решает любую проблему, и как вы должны эскалации в root.
Если вы обнаружите, что ваш сервер разрешает вход в систему root, но вы неправильно используете пароль, обязательно заблокируйте его. Другие ответы на ваш вопрос предполагают, что вы разрешаете вход в систему root, но вместо этого я прошу вас понять ситуацию и оставаться в безопасности, следуя этому совету. Посмотрите на ssh упрочнение и, по крайней мере, настройте fail2ban.
По умолчанию root-доступ отключен по ssh. Вы можете включить root ssh access или ssh в качестве обычного пользователя и su или sudo.
Чтобы включить регистрацию root через ssh:
В качестве пользователя root отредактируйте файл sshd_config в файле / etc / ssh / sshd_config:
sudo nano /etc/ssh/sshd_config.
Добавить строку в разделе «Аутентификация» файла, который говорит
PermitRootLogin yes. ...Сохранить обновленный файл / etc / ssh / sshd_config. Перезагрузите SSH-сервер:
sudo service sshd restart.
Чтобы включить регистрацию root через ssh:
Это нехорошее решение проблемы, поскольку оно предоставляет root , в то время как пользователь уже имеет правильного пользователя с привилегиями sudo.
Корневой вход с использованием SSH-ключей (возможно, более безопасный):
Если вы должны root логин через SSH, возможно, более безопасен (и проще) для входа в систему с использованием SSH-ключей. Настройка немного длиннее, но в общих чертах описано, как настроить доступ к SSH без пароля для пользователя root
Здесь может быть несколько причин.
Во-первых, многие дистрибутивы Linux приходят или, по крайней мере, предлагают заблокировать пользователя root из ssh. Это связано с тем, что каждая система поставляется с root, и это упрощает переборку машины, если вы знаете о пользователе.
В противном случае вам нужно понять, что каждый пользователь имеет свой собственный пароль, и он является паролем этого пользователя, а записи, найденные для sudo в /etc/sudoers, - которые позволяют пользователю успешно выполнять команду с помощью sudo.
Чтобы уточнить, когда вы используете эту команду, вы используете пароль USER:
sudo su -i
sudo проверяет, разрешено ли вам запускать эту команду, а также запрашивает пароль пользователя.
При входе в систему вы снова используете этот пароль пользователя. Маловероятно, и плохая практика заключается в том, чтобы ваш ПОЛЬЗОВАТЕЛЬ и ваш корневой аккаунт делили пароли. В этом случае, поскольку вы знаете пароль USER, вы должны сделать следующее:
ssh USER@myserver
sudo su -
Здесь вы получаете доступ к системе, используя учетную запись USER, и известный пароль, а затем переходите в root. Это решает любую проблему, и как вы должны эскалации в root.
Если вы обнаружите, что ваш сервер разрешает вход в систему root, но вы неправильно используете пароль, обязательно заблокируйте его. Другие ответы на ваш вопрос предполагают, что вы разрешаете вход в систему root, но вместо этого я прошу вас понять ситуацию и оставаться в безопасности, следуя этому совету. Посмотрите на ssh упрочнение и, по крайней мере, настройте fail2ban.
По умолчанию root-доступ отключен по ssh. Вы можете включить root ssh access или ssh в качестве обычного пользователя и su или sudo.
Чтобы включить регистрацию root через ssh:
В качестве пользователя root отредактируйте файл sshd_config в файле / etc / ssh / sshd_config:
sudo nano /etc/ssh/sshd_config.
Добавить строку в разделе «Аутентификация» файла, который говорит
PermitRootLogin yes. ...Сохранить обновленный файл / etc / ssh / sshd_config. Перезагрузите SSH-сервер:
sudo service sshd restart.
Чтобы включить регистрацию root через ssh:
Это нехорошее решение проблемы, поскольку оно предоставляет root , в то время как пользователь уже имеет правильного пользователя с привилегиями sudo.
Корневой вход с использованием SSH-ключей (возможно, более безопасный):
Если вы должны root логин через SSH, возможно, более безопасен (и проще) для входа в систему с использованием SSH-ключей. Настройка немного длиннее, но в общих чертах описано, как настроить доступ к SSH без пароля для пользователя root
Здесь может быть несколько причин.
Во-первых, многие дистрибутивы Linux приходят или, по крайней мере, предлагают заблокировать пользователя root из ssh. Это связано с тем, что каждая система поставляется с root, и это упрощает переборку машины, если вы знаете о пользователе.
В противном случае вам нужно понять, что каждый пользователь имеет свой собственный пароль, и он является паролем этого пользователя, а записи, найденные для sudo в /etc/sudoers, - которые позволяют пользователю успешно выполнять команду с помощью sudo.
Чтобы уточнить, когда вы используете эту команду, вы используете пароль USER:
sudo su -i
sudo проверяет, разрешено ли вам запускать эту команду, а также запрашивает пароль пользователя.
При входе в систему вы снова используете этот пароль пользователя. Маловероятно, и плохая практика заключается в том, чтобы ваш ПОЛЬЗОВАТЕЛЬ и ваш корневой аккаунт делили пароли. В этом случае, поскольку вы знаете пароль USER, вы должны сделать следующее:
ssh USER@myserver
sudo su -
Здесь вы получаете доступ к системе, используя учетную запись USER, и известный пароль, а затем переходите в root. Это решает любую проблему, и как вы должны эскалации в root.
Если вы обнаружите, что ваш сервер разрешает вход в систему root, но вы неправильно используете пароль, обязательно заблокируйте его. Другие ответы на ваш вопрос предполагают, что вы разрешаете вход в систему root, но вместо этого я прошу вас понять ситуацию и оставаться в безопасности, следуя этому совету. Посмотрите на ssh упрочнение и, по крайней мере, настройте fail2ban.
По умолчанию root-доступ отключен по ssh. Вы можете включить root ssh access или ssh в качестве обычного пользователя и su или sudo.
Чтобы включить регистрацию root через ssh:
В качестве пользователя root отредактируйте файл sshd_config в файле / etc / ssh / sshd_config:
sudo nano /etc/ssh/sshd_config.
Добавить строку в разделе «Аутентификация» файла, который говорит
PermitRootLogin yes. ...Сохранить обновленный файл / etc / ssh / sshd_config. Перезагрузите SSH-сервер:
sudo service sshd restart.
Чтобы включить регистрацию root через ssh:
Это нехорошее решение проблемы, поскольку оно предоставляет root , в то время как пользователь уже имеет правильного пользователя с привилегиями sudo.
Корневой вход с использованием SSH-ключей (возможно, более безопасный):
Если вы должны root логин через SSH, возможно, более безопасен (и проще) для входа в систему с использованием SSH-ключей. Настройка немного длиннее, но в общих чертах описано, как настроить доступ к SSH без пароля для пользователя root