Как я автоматически устанавливаю переменную $DISPLAY для своей текущей сессии

Здесь уже есть несколько хороших ответов - я определенно рекомендую № 2 или № 3 - разделение хорошо как в концептуальном плане, так и на практике.

Может быть трудно предсказать такие вещи, как загрузка и шаблоны трафика для API, и клиенты, которых мы видим, кто обслуживает API независимо, имеют более легкое время предоставления и масштабирования. Если вам нужно сделать это в сочетании с шаблонами доступа в Интернет, это будет не так просто. Кроме того, использование вашего API может в конечном итоге расширяться намного быстрее, чем ваш веб-клиент, и тогда вы сможете увидеть, куда направить свои усилия.

Между № 2 и 3 это действительно зависит от ваших целей - я согласен, что № 2, вероятно, будущее веб-приложений - но, возможно, вы хотите что-то более прямолинейное, если этот канал станет одним из многих!

11
задан Nifle 29 June 2009 в 11:45
поделиться

5 ответов

Я предполагаю здесь, основываясь на проблемах, которые у меня были в прошлом, которые я решил:

  • вы подключаетесь к серверу vnc на машине B, отображая его с помощью Клиент VNC на машине A
  • вы запускаете консоль (xterm или эквивалент) на машине B и используете ее для подключения к машине C
  • вы хотите запустить приложение на основе X на машине C, чтобы оно отображалось на сервер VNC на машине B, так что вы можете увидеть его на машине A.

В итоге я нашел два решения. Мое первоначальное решение было основано на использовании rsh. С тех пор на большинстве наших серверов был установлен ssh, что упростило эту задачу.

Используя rsh, я составил таблицу машин, ОС и пользовательских опций, которые будут руководить этим процессом в Perl. Оболочки Борна было недостаточно, и у нас нет bash на машинах Sun или HP (и не было) В то время на AIX не было bash - AIX 5L еще не вышла). Оболочка Korn тоже не подходила, поскольку в большинстве наших Linux-систем не установлен pdksh. Но, если вы не сталкиваетесь с этими ограничениями, я думаю, вы можете реализовать идею в ksh или bash.

В любом случае, я бы в основном запустил 'rsh $ machine -l $ user "$ cmd"', где $ machine, конечно, это была машина, на которую я входил, $ user, так же очевидно (хотя, когда я входил как "root", это имело некоторые различия, поскольку у нас есть несколько корней на некоторых машинах по причинам, которые я не полностью понимаю), а $ cmd было в основном "DISPLAY = $ DISPLAY xterm", хотя, если бы я, например, запускал консоль, $ cmd было бы "konsole --display = $ DISPLAY". Поскольку $ DISPLAY оценивался локально (где он установлен правильно),

1
ответ дан 3 December 2019 в 06:22
поделиться

вы используете Bash? Перейдите к файлу .bashrc в вашем домашнем каталоге и установите переменную, затем экспортируйте ее.

DISPLAY = localhost: 0.0; export DISPLAY

, вы можете использовать / etc / bashrc, если хотите сделать это для всех пользователей.

Вы также можете посмотреть ~ / .bash_profile и / etc / profile

EDIT:

function get_xserver ()
{
    case $TERM in
       xterm )
            XSERVER=$(who am i | awk '{print $NF}' | tr -d ')''(' )    
            XSERVER=${XSERVER%%:*}
            ;;
        aterm | rxvt)           
            ;;
    esac  
}

if [ -z ${DISPLAY:=""} ]; then
    get_xserver
    if [[ -z ${XSERVER}  || ${XSERVER} == $(hostname) || \
      ${XSERVER} == "unix" ]]; then 
        DISPLAY=":0.0"          # Display on local host.
    else
        DISPLAY=${XSERVER}:0.0  # Display on remote host.
    fi
fi

export DISPLAY
9
ответ дан 3 December 2019 в 06:22
поделиться

После входа в систему вам потребуется указать клиенту vnc экспортировать правильный $ DISPLAY. Как вы это сделаете, вероятно, будет зависеть от вашего клиента vnc.

0
ответ дан 3 December 2019 в 06:22
поделиться

На вашем vncserver есть файл конфигурации, в котором установлен номер дисплея. Чтобы сделать это автоматически, одно из решений - проанализировать этот файл, извлечь номер и установить его правильно. Более простой (лучший) вариант - установить этот номер отображения в сценарии конфигурации и использовать его как в конфигурации сервера VNC, так и в сценариях инициализации.

1
ответ дан 3 December 2019 в 06:22
поделиться

Вот кое-что, что я только что придумал. Он проверяет среду последнего запущенного процесса "gnome-session" (DISPLAY устанавливается правильно, когда VNC запускает сеанс / оконный менеджер). Замените "gnome-session" именем любого процесса, который ваш VNC-сервер запускает при запуске.

PID=`pgrep -n -u $USER gnome-session`
if [ -n "$PID" ]; then
    export DISPLAY=`awk 'BEGIN{FS="="; RS="\0"}  $1=="DISPLAY" {print $2; exit}' /proc/$PID/environ`
    echo "DISPLAY set to $DISPLAY"
else
    echo "Could not set DISPLAY"
fi
unset PID

Вы должны просто оставить это в своем .bashrc-файле.

8
ответ дан 3 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

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