Как запустить скрипт (.sh) файлы в новом терминале после соединения с сервером Ubuntu 16.04 через ssh?

Я попробовал много путей такой как

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:
3
задан 26 May 2018 в 15:40

3 ответа

Принятие Ubuntu к Ubuntu

Если Вы используете рабочий стол Windows 10 и хотите соединиться со своим сервером человечности

Простое решение состоит в том, чтобы установить и использовать Шпаклевку в Windows согласно следующей ссылке,

www.putty.org/

PuTTY является SSH и клиентом telnet, разработанным первоначально Simon Tatham для платформы Windows. PuTTY является программным обеспечением с открытым исходным кодом, которое доступно с исходным кодом и разрабатывается и поддерживается группой волонтеров.

Можно загрузить PuTTY здесь.

Можно запустить одно или несколько окон Putty и выполнить различные задачи через ssh.


Как описано в комментарии @SergiyKolodyazhnyy, можно использовать xrdp открыть сессию удаленного рабочего стола от Windows до Ubuntu.

Как описано в комментарии @PerlDuck, можно установить и использовать X-сервер в Windows, чтобы смочь запустить программы графического приложения через ssh, но согласно Вашему исходному вопросу, это могло бы быть излишество.

3
ответ дан 1 December 2019 в 13:23

Вот вещь: terminator и gnome-terminal приложения для GUI. Если Ваш сценарий не требует GUI и является простым сценарием оболочки, то Вы могли выполнить его на своей ssh сессии очень хорошо, не нуждаясь в эмуляторе терминала. Конечно, Ваш сценарий должен жить на файловой системе, где Вы пытаетесь запустить скрипт.

Если по некоторым причинам Вам абсолютно нужно terminator или gnome-terminal, Вы могли всегда использовать xrdp для запуска сессии удаленного рабочего стола. Это, конечно, если система Ubuntu, к которой Вы пытаетесь получить доступ, имеет X-сервер вообще; серверы, например, часто не имеют никакого GUI, потому что это - угроза безопасности.

2
ответ дан 1 December 2019 в 13:23

Возможно запустить приложение, которое требует 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. Использование:

  • Установите сессию SSH;
  • Выполниться 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. Демонстрация:

enter image description here


5. Ссылки и больше примеров:

2
ответ дан 1 December 2019 в 13:23

Другие вопросы по тегам:

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