Я попробовал много путей такой как
terminator -x abc.sh
Вышеупомянутая команда дает мне эту ошибку:
You need to run terminator in an X environment. Make sure $DISPLAY is properly set
Я также попробовал
gnome-terminal -x ./abc.sh
Вышеупомянутая команда дает мне ошибку ниже
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Failed to parse arguments: Cannot open display:
При установке соответствующего программного обеспечения в сервере можно войти в систему удаленно с ssh -X
и затем запущенные программы графического приложения как terminator
и gnome-terminal
. См. эту ссылку,
Можно также просто запустить другие окна терминала локально, и в тех окнах входят в систему удаленно с ssh
и тот путь запускает несколько прикладных программ текстового режима в сервере (каждый в его собственном окне терминала).
Простое решение состоит в том, чтобы установить и использовать Шпаклевку в Windows согласно следующей ссылке,
PuTTY является SSH и клиентом telnet, разработанным первоначально Simon Tatham для платформы Windows. PuTTY является программным обеспечением с открытым исходным кодом, которое доступно с исходным кодом и разрабатывается и поддерживается группой волонтеров.
Можно загрузить PuTTY здесь.
Можно запустить одно или несколько окон Putty и выполнить различные задачи через ssh
.
Как описано в комментарии @SergiyKolodyazhnyy, можно использовать xrdp
открыть сессию удаленного рабочего стола от Windows до Ubuntu.
Как описано в комментарии @PerlDuck, можно установить и использовать X-сервер в Windows, чтобы смочь запустить программы графического приложения через ssh
, но согласно Вашему исходному вопросу, это могло бы быть излишество.
Вот вещь: terminator
и gnome-terminal
приложения для GUI. Если Ваш сценарий не требует GUI и является простым сценарием оболочки, то Вы могли выполнить его на своей ssh сессии очень хорошо, не нуждаясь в эмуляторе терминала. Конечно, Ваш сценарий должен жить на файловой системе, где Вы пытаетесь запустить скрипт.
Если по некоторым причинам Вам абсолютно нужно terminator
или gnome-terminal
, Вы могли всегда использовать xrdp для запуска сессии удаленного рабочего стола. Это, конечно, если система Ubuntu, к которой Вы пытаетесь получить доступ, имеет X-сервер вообще; серверы, например, часто не имеют никакого GUI, потому что это - угроза безопасности.
Возможно запустить приложение, которое требует GUI от сессии SSH в Настольную сессию, если Вам действительно нужен он. Я использую следующий подход для запуска виртуальных машин VMware, когда мне нужны они, но я не нахожусь на передней стороне компьютера.
Я подчеркнул бы, что Вы упомянули, что соединяетесь с Сервером Ubuntu, которому не установили Настольную среду по умолчанию. И в этом случае это стоит для использования tmux
или screen
, или отодвиньте сценарий на задний план или используйте вторую сессию SSH. Если Настольная среда установлена в сервер, следующие шаги могли бы быть применены.
Следующие сценарии работают с Lightdm и Unity, которые являются значением по умолчанию для Ubuntu 16.04.
1. Первое требование - то, что Ваш пользователь должен быть зарегистрирован на Настольной сессии. То, что я использую для достижения, это - следующий сценарий (источник и объяснения):
#!/bin/bash
# NAME: lightdm-auto-login
main() {
# If the file '/etc/lightdm/lightdm.conf' exists create a backup copy
[[ -f /etc/lightdm/lightdm.conf ]] && mv /etc/lightdm/lightdm.conf{,.bak}
# Create autologin configuration for the current $USER = $1
echo -e "[Seat:*]\nautologin-user=$1" > /etc/lightdm/lightdm.conf
# Restart 'lightdm' while autologin option is enabled
systemctl restart lightdm.service
# Wait for a moment to complete the login process and remove the conf file
sleep 30 && rm /etc/lightdm/lightdm.conf
# Restore the backup if exists
[[ -f /etc/lightdm/lightdm.conf.bak ]] && mv /etc/lightdm/lightdm.conf{.bak,}
}
# Execute the 'main()' function with root privileges in the background 'sudo -b'
# Pass the curent $USER as arg (https://unix.stackexchange.com/a/269080/201297)
sudo -b bash -c "$(declare -f main); main $USER"
Сценарий должен быть выполнен как обычный пользователь (который принадлежит sudoers группе).
Я предпочел бы помещать сценарий в /usr/local/bin
быть доступным как широкая система команд оболочки. Не делайте забыл делать это исполняемым файлом.
2. Во-вторых, немного переменных среды (как $DISPLAY
, и т.д.), должен быть экспортирован из Настольной сессии в сессию SSH. Следующий сценарий сделает это и также запустит команды, которые передаются как позиционные параметры (источник и объяснения):
#!/bin/bash -e
# NAME: gui-launcher
# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done
# Export the current desktop session environment variables
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ")
# Execute the input command
nohup "$@" >/dev/null 2>&1 &
exit 0
Сценарий будет работать, пока пользователь не будет зарегистрирован, включая заблокированный экран.
Я предпочел бы помещать сценарий в /usr/local/bin
быть доступным как широкая система команд оболочки. Не делайте забыл делать это исполняемым файлом.
3. Использование:
lightdm-auto-login
;Выполниться gui-launcher <commands or script>
, например:
gui-launcher gnome-terminal -x bash -c "<my command or script>; exec bash"
Отметьте последнюю команду sub exec bash
сохранит запущенное gnome-terminal
открытый, после того, как предыдущая команда является концом.
4. Демонстрация:
5. Ссылки и больше примеров: