Пересылка X11 из кластера Linux на персональный компьютер с Windows 10 через SSH

Hay un solo comando simple que podría usar para hacer esto en bash, pero probablemente viola el requisito de "no usar bashfinalización". No obstante, he incluido esto al final de esta respuesta. En cambio, usaré un par de bucles para resolver esto.

Suponiendo que desee encontrar todos los comandos externos ejecutables que comiencen con la letra gen cualquiera de los directorios enumerados en su$PATH:

#!/bin/sh

IFS=:; set -f; set -- $PATH; set +f
for dirpath do
    for pathname in "$dirpath"/g*; do
        if [ -x "$pathname" ]; then
            printf 'Executable: %s (%s)\n' "${pathname##*/}" "$pathname"
        fi
    done
done

Esto primero establece los parámetros posicionales en la lista de directorios contenidos en su variable PATH. Hace esto configurando IFSa :. Esto significa que cuando usamos $PATHsin comillas, su valor se dividirá en los:-caracteres de la cadena. Para usar la variable sin comillas de forma segura, también usamos set -fpara desactivar temporalmente el globbing, en caso de que alguna parte de la cadena pueda interpretarse como un patrón de globbing de nombre de archivo. Habilitamos el globbing nuevamente con set +fporque lo necesitamos más adelante.

Una vez que hemos establecido los parámetros posicionales en la lista de rutas de directorio, iteramos sobre estos. En cada iteración, obtenemos los nombres de ruta de cualquier archivo que comience con la letra gen ese directorio y probamos cada uno para ver si 1 )existe y 2 )es ejecutable (el -xtest hace ambas cosas ). Si es ejecutable, mostramos su nombre y su ruta completa.

Tenga en cuenta que esto restringe la pregunta para cubrir solo los comandos ejecutables externos en el $PATHactual. No encontrará alias ni funciones de shell. Tampoco se tendrán en cuenta las utilidades que solo están disponibles como incorporadas -en las utilidades.

Con un shell que entiende ${variable//pattern/word}para reemplazar un patrón con una cadena en cualquier parte del valor de una variable, y con un findque sabe -maxdepthy-executable(felicitaciones a isaac por mencionar este enfoque en otros lugares):

(
    set -f
    find -H -- ${PATH//:/ } -maxdepth 1 -type f -name 'g*' -executable
)

Esto desactivaría el globbing para el comando find, luego buscaría en cada uno de los directorios enumerados en $PATHcualquier nombre que comience con gque corresponda a un archivo ejecutable. Esto sería ejecutable solo por el usuario actual. Use -perm -o+xen lugar de -executablepara probar si el bit ejecutable está configurado para "otros".

La ​​opción -Hpara findhará que resuelva los enlaces simbólicos proporcionados en la línea de comando (, es decir, las rutas de búsqueda ), pero no las encontradas al atravesar las rutas.


Lo anterior era una solución genérica /bin/sh. Si se le permite usar comandos especiales bash, puede generar una lista de todos los comandos externos, funciones de shell y alias, que comienzan con la letra gcon

compgen -c g

Para incluir -incorporado en los comandos, use

compgen -bc g

... pero esto puede contar como "usar bashfinalización".

El compgenconstruido -en el mando está documentado en el manual bash(1).

1
03.06.2019, 19:15
2 ответа

Когда вы подключаетесь к кластеру Linux с переадресацией X11, вы разрешаете X-клиентам, работающим в кластере, связываться с вашим X-сервером на ПК с Windows 10.

Чтобы это работало, вам нужно запустить X-сервер в первую очередь -, а поскольку Windows — это не Linux, X-сервер не запускается по умолчанию.

XQuartz — это X-сервер для MacOS. Опции для X-сервера для Windows, например. VcXsrv и Xming(не уверены, будут ли они работать в Windows 10 )и на сервере Cygwin X . Возможно, есть еще.

А учитывая разработку подсистемы Windows для Linux (WSL ), возможно, когда-нибудь в будущем появится собственный сервер Microsoft X.

0
28.04.2021, 23:32

При использовании переадресации SSH X11 отображаемый номер обычно должен быть 10.0 или выше.

Если сообщение об ошибке действительно говорит localhost:0.0, это предполагает, что в кластере может быть какая-то настройка среды, которая переопределяет переменную DISPLAY. Не делайте этого:sshdна удаленном конце автоматически установит правильное значение переменной DISPLAYкак часть инициализации вашего сеанса, когда будет запрошена и принята переадресация X11. Вы не можете знать правильное значение заранее, так как оно зависит от того, сколько других подключений X11 -для переадресации SSH к кластеру уже установлено, когда вы устанавливаете подключение.

Примечание.:Настройка export DISPLAY=<name of your Windows host pc>:0.0в кластере приведет к тому, что любые приложения попытаются установить небезопасное незашифрованное соединение X11 непосредственно из приложения с сервером X11 на вашем хосте Windows. Это не рекомендуется и может (или, скорее, должно! )блокируется брандмауэрами/NAT на обоих концах.

0
28.04.2021, 23:32

Теги

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