4

У меня запущен Firefox, и из командной строки я могу открыть новую вкладку, просто набрав:

firefox http://stackoverflow.com

То, что я пытаюсь сделать, похоже, но отдаленно. У меня Firefox работает на компьютере B. С компьютера AI я хочу иметь возможность запускать (после установки необходимого ssh-туннелирования или аналогичного) что-то вроде:

firefox http://stackoverflow.com

Однако эта вкладка должна открываться не на машине A, а на машине B. Я не хочу пересылку X11, я просто хочу дать возможность Firefox на удаленной машине дать указание открыть заданный URL-адрес.

Есть идеи?

2 ответа2

1

На машине, где Firefox будет работать и отображать (машина A), вам необходимо:

  • Укажите, к какому X-серверу подключаться, например, установите DISPLAY =:0.0.
  • Как-то аутентифицироваться на X-сервере. Самый простой способ - прочитать значение $ XAUTHORITY в сеансе X и использовать то же самое.

Например, в терминале в сеансе X выполните:

$ echo $XAUTHORITY 
/var/run/gdm/auth-for-ambro-j3bu8Q/database

Затем из терминала SSH выполните то же действие, что и для сеанса X (в противном случае используйте su):

DISPLAY=:0.0 XAUTHORITY=/var/run/gdm/auth-for-ambro-j3bu8Q/database firefox http://stackoverflow.com

Вы можете получить значение $ XAUTHORITY, автоматически записанное где-нибудь при входе в систему. Например, создайте следующий скрипт ~/write-xauth (не забудьте chmod +x):

#!/bin/bash
touch "$HOME"/.saved-xauthority
chmod u=rw,g=,o= "$HOME"/.saved-xauthority
echo "$XAUTHORITY" > "$HOME"/.saved-xauthority

Затем создайте файл автозапуска, который запустит вышеуказанный скрипт, ~/.config/autostart/save-xauthority.desktop:

[Desktop Entry]
Type=Application
Name=Save XAUTHORITY to .saved-xauthority
Exec=/home/<type_user>/write-xauth
Terminal=false
X-KDE-StartupNotify=false
StartupNotify=false

Если у вас есть оболочка на машине B (машина, на которой Firefox не будет отображаться), вам просто нужно подключиться по SSH к машине A (на которой будет работать и будет отображаться Firefox) и запустить команду firefox, которую я разместил. Это можно автоматизировать в сценарий на компьютере B. Для аутентификации SSH на компьютере А. вам понадобятся ключи (а не пароль). Например, см. Https://wiki.archlinux.org/index.php/SSH_Keys. , Это позволит вам ssh неинтерактивно без ввода пароля. Теперь вы можете запускать команды на машине A с машины B, набрав:

ssh machineA command argument ...

В вашем случае вы, вероятно, захотите создать на машине A скрипт для открытия окна Firefox:

ssh machineA ./open_local_firefox http://whatever

И этот скрипт будет выглядеть примерно так:

#!/bin/bash
export DISPLAY=:0.0
export XAUTHORITY=$(cat "$HOME"/.saved-xauthority)
firefox "$1" &>/dev/null 2>&1 &

Стоит отметить, что эта настройка позволит машине B запускать что-либо на машине A как пользователь SSHing. Можно ограничить это, но это нелегко. Если вы хотите сделать это с SSH, опция ForceCommand sshd, вероятно, поможет.

Конечно, есть и другие способы сделать это, но все сводится к запуску команды «firefox» на компьютере A с правильными переменными среды (как показано выше) в качестве правильного пользователя. Например, вы можете настроить HTTP-сервер и скрипт на компьютере A, чтобы определенный запрос POST открывал это окно Firefox. Это, вероятно, легче обеспечить, чем подход SSH.

0

Ваш вопрос не очень понятен. Если вы имеете в виду, что вы сидите перед вашим локальным компьютером L и хотите запустить firefox во время сеанса X на удаленном компьютере R, вы можете сделать следующее:

С вашей машины L войдите на удаленную машину R с помощью ssh:

ssh wife@remotemachine

Поиск запущенных дисплеев X на удаленной машине (дисплеи соответствуют сокету в /tmp /.X11-Unix):

ls -l /tmp/.X11-unix/

Следующее было результатом в моем случае:

srwxrwxrwx. 1 erik         erik         0 13. Jun 14:44 X0
srwxrwxrwx. 1 concubine    concubine    0 13. Jun 11:40 X1
srwxr-xr-x. 1 gdm          gdm          0 13. Jun 11:13 X1024
srwxrwxrwx. 1 gdm          gdm          0 13. Jun 16:17 X2
srwxrwxrwx. 1 wife         wife         0 13. Jun 16:25 X3

Я хочу показать жене что-то на ее дисплее, поэтому я делаю:

export DISPLAY=:3

Это соответствует сокету X3 .

После этого я просто запускаю:

firefox 'http://superuser.com/a/1088747/180675'

чтобы показать ей этот интересный ответ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .