Что мне нужно, так это разрешить удаленному пользователю доступ к хост-машине (Ubuntu) через VNC. Подвох в том, что пользователю разрешено использовать только определенное программное обеспечение и ничего больше.

Мое решение на данный момент заключается в использовании x-gtk-vnc для встраивания определенного Xwindow в html-страницу на стороне клиента. Это работает ... за исключением того, что и параметры всплывающего окна не будут регистрироваться на стороне клиента (так как они рассматриваются как отдельные окна).

Возможное решение № 1 вращается вокруг использования скрипта, чтобы сообщить, когда новое окно открыто. Однако я не знаю каких-либо команд оболочки, которые могут это сделать (xwininfo требует от вас выбрать окно), и мне, вероятно, придется жестко закодировать тонны возможных всплывающих окон в html.

Возможное решение № 2 вращается вокруг создания чистого виртуального рабочего стола, в котором интересующее программное обеспечение выполняется в качестве основного приложения (его нельзя свернуть или свернуть, а также нет панелей задач и т.д.), И все всплывающие меню отображаются на переднем плане. К сожалению, я понятия не имею, как это сделать. Я могу подключиться к конкретному рабочему столу, используя x-gtk-vnc, также встроенный в html.

Кто-нибудь может указать мне правильное направление с любым решением? Лично предпочитаю № 2. Другие решения также приветствуются.

1 ответ1

2

Решение 2 будет намного проще.

Предполагая, что вы используете пакет vnc4viewer , включенный в Ubuntu, просто отредактируйте скрипт ~/.vnc/xstartup для учетной записи, под которой будет работать удаленный пользователь, и замените его следующим содержимым:

#!/bin/bash

function start_and_wait {
    #Put the command line for the program you need to run here, followed by an
    #ampersand (&). For example, we'll start gedit:
    gedit &

    wait $!
    start_and_wait
}

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
metacity &
start_and_wait

Это запустит оконный менеджер metacity GNOME сам по себе, поэтому всплывающие окна можно обрабатывать разумно. (Они могут даже Alt+Tab вокруг, если им нужно.) Хотя пользователь сможет свернуть и изменить размер окна, он просто предоставит пользователю пустой рабочий стол, с которым он ничего не может сделать. Нет панели, нет меню, нет значка, ничего. Сценарий также перезапустит программу, если она по какой-либо причине закрыта.

Как только вы это сделаете, просто запустите vncserver и вы станете золотым. Вы можете поместить эту команду в свой /etc/rc.local (или написать правильный начальный скрипт) перед строкой exit 0 чтобы сервер запускался при каждой загрузке:

su username -c "vncserver :7"

Это запустит сервер на рабочем столе :7 (порт 5907), так что любые другие VNC-серверы, которые вы могли бы запустить, не будут мешать, и у вас будет предсказуемый номер рабочего стола, который нужно вставить в HTML-файл.

Убедитесь, что вы используете отдельную учетную запись для удаленного пользователя, которая достаточно заблокирована, потому что даже если у них есть доступ только к одной программе, есть еще много способов получить дополнительный доступ к системе. (Диалоги файлов, команды, которые могут открывать оболочку и т.д.)

Обратите внимание, что хотя можно использовать любой оконный менеджер, и большинство людей будут использовать простые, такие как twm (или что-то еще, что дети используют в наши дни), я придерживался metacity потому что он включен по умолчанию и для простоты.

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