VNC через маршрутизатор Raspberry Pi с переадресацией портов

Это расширенные координаты мыши 1015 urxvt, см. http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking (и Кстати, второе и третье числа - координаты ячейки). Основная цель этого расширения протокола - поддерживать координаты мыши выше 223.

Другое, более подходящее расширение - это режим xterm SGR 1006, который решает ту же проблему (и даже больше) без некоторых недостатков, присущих расширению urxvt. Режим Xterm 1006 должен заменить режим 1015 urxvt. Однако

rxvt-unicode (он же urxvt) - единственный известный мне эмулятор терминала, который поддерживает события мыши, но не поддерживает это расширение. Я разговаривал с его автором в январе 2012 года, но он отказался реализовать этот режим по непонятным мне причинам. Может быть, кому-то стоит попробовать еще раз; urxvt требует всего несколько строк тривиального кода.

Midnight Commander реализует это новое и лучшее расширение xterm и больше не реализует расширение urxvt. Подробнее см. Билеты на mc 2662 и 2956 .

Это означает, что обычно mc должен запрашивать расширение, которое urxvt не поддерживает, и, следовательно, продолжать работу без использования какого-либо расширения (а мышь работает только до столбца 223).

В вашем случае, вероятно, приложение выполняет некорректный выход и оставляет это расширение мыши включенным, что сбивает с толку mc (оно не понимает, что получает). Вы можете выйти из mc, а затем отключить это расширение, выполнив echo -ne '\ e [? 1015l' , и, наконец, перезапустить mc.

К сожалению, в urxvt-9.21 команда reset не отключает это расширение, хотя это действительно необходимо. Я считаю, что это ошибка.

Если эта повторяющаяся проблема действительно беспокоит вас, я рекомендую вам включить указанную выше escape-последовательность в ваше приглашение (или переключиться на другой эмулятор, поддерживающий расширение 1006). Или отследите и исправьте приложение, которое оставляет это расширение включенным при выходе.

3
26.02.2017, 17:00
3 ответа

Ваш сценарий работает и создает следующие записи iptables:

# iptables -L FORWARD -nv
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.10         tcp dpt:10010
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.11         tcp dpt:10011
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.12         tcp dpt:10012
...
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.98         tcp dpt:10098
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.99         tcp dpt:10099
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.100        tcp dpt:10100

# iptables -t nat -L PREROUTING -nv
Chain PREROUTING (policy ACCEPT 11 packets, 1746 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10010 to:192.168.1.10:5900
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10011 to:192.168.1.11:5900
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10012 to:192.168.1.12:5900
...
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10098 to:192.168.1.98:5900
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10099 to:192.168.1.99:5900
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10100 to:192.168.1.100:5900

Поместите ваш сценарий в собственный файл с #! / Bin / bash в строке 1, дайте ему разрешение на выполнение, проверьте его и, когда он будет готов, вызовите его из rc.local `

1
27.01.2020, 21:21

По умолчанию файл /etc/rc.local интерпретируется sh (первая строка этого файла гласит #! / Bin / sh -e ). Вы использовали цикл в стиле C для , который работает только в bash . Я считаю, что это основная причина.

Либо замените первую строку /etc/rc.local на #! / Bin / bash -e , либо перепишите цикл в sh-совместимой манере:

counter=0
while [ "$counter" -lt 91 ]
do
    port=$((10010+counter))
    address=$((10+counter))
    iptables -A PREROUTING -t nat -i eth0 -p tcp --dport "$port" -j DNAT --to 192.168.1."$address":"$vncport"
    iptables -A FORWARD -p tcp -d 192.168.1."$address" --dport "$port" -j ACCEPT
    counter=$((1+counter))
done
1
27.01.2020, 21:21

В основном Linux использует один и тот же брандмауэр. Таким образом, настройте брандмауэр должным образом в любом настольном Linux и после проверки скопируйте правила iptable в Raspberry Pi. Думаю, это может помочь с ошибкой конфигурации. Хотя это дешевый трюк :)

1
27.01.2020, 21:21

Теги

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