Как изменить IP-адрес локального сервера на общедоступный IP-адрес

Дополнение к ответу mivk, в котором я избегаю лажи с новым юнит-файлом (см. мой вопрос здесь Как реагировать на события крышки ноутбука?). Вот мое решение; это не на 100% просто(вздох ), потому что система нестабильна, когда выходит из спящего режима:

На моем компьютере с Fedora 26 я разместил символическую ссылку здесь :/usr/lib/systemd/system-sleep/sleepyhead, которая указывает здесь :/root/bin/sleepyhead, которая содержит:

#!/bin/sh
## This file (or a link to it) must be in /lib/systemd/system-sleep/

# This is called when the lid is closed, as follows:
# $0=/usr/lib/systemd/system-sleep/sleepyhead, $1=pre, $2=suspend
#...and when the lid is opened, as follows:
# $0=/usr/lib/systemd/system-sleep/sleepyhead, $1=post, $2=suspend


touch /tmp/sleepyrun
logger -t "sleepyhead" "Start: \$1=$1, \$2=$2"
if [ "$1" = "post" ] ; then
    action="RUN trackpoint"
    bash /root/bin/trackpoint >/tmp/trackpoint-run 2>&1
else
    action="NO ACTION"
fi
logger -t "sleepyhead" "${action}: " "\$1=$1, \$2=$2"

Далее следует сценарий /root/bin/trackpoint. Обратите внимание, что первый сон имеет решающее значение. Устройство настраивается каждый раз, когда открывается крышка, поэтому сначала оно не существует. Если я попытаюсь сделать что-нибудь, кроме сна, скрипту «сони» потребуется очень много времени для выхода, и мой указатель будет заморожен как минимум на 60 секунд. Кроме того, обратите внимание, что вы не можете поместить скрипт /root/bin/trackpointв фоновый режим в sleepyheadвыше. Если вы это сделаете, процесс будет уничтожен при завершении sleepyhead.

#!/bin/bash
# This is /root/bin/trackpoint

echo "Start $0"
date

found=false
dir=""
# dirlist can look like:
# /sys/devices/platform/i8042/serio1/serio25/speed
# /sys/devices/platform/i8042/serio1/serio24/speed
#...the older one appears to get cleaned a little later.

sleep 1 # If I don't put this in here, my pointer locks up for a really long time...
for i in 1 2 3 4; do
    speedfiles=$(find /sys/devices/platform/i8042 -name speed) # There may be multiple speed files at this point.
    [ -z "$speedfiles" ] && { sleep 1; continue; }
    dirlist=$(dirname $speedfiles)
    printf "Speed file(s) at $(find /sys/devices/platform/i8042 -name speed | tail -1) \n"
    # All this remaking of the path is here because the filenames change with
    # every resume, and what's bigger: 9 or 10?...Depends if you're
    # lexicographical or numerical. We need to always be numerical.
    largest_number="$(echo $dirlist | tr ' ' '\n' | sed -e 's/.*serio//' | sort -n | tail -1)"
    dir="$(echo $dirlist | tr ' ' '\n' | egrep serio${largest_number}\$ )"
    echo "Dir is $dir number is $largest_number" 
    [ -n "$dir" ] && found=true && break
done
$found || exit 1


date
echo -n 4 > $dir/inertia
echo -n 220 > $dir/sensitivity
echo -n 128 > $dir/speed
date
echo "Done $0"

0
03.01.2019, 15:58
1 ответ

@ibrahim, если у вас есть маршрутизатор с общедоступным IP-адресом, вы можете использовать переадресацию портов на определенный порт на том сервере, который вы настроили.

ссылка:https://en.wikipedia.org/wiki/Port_forwarding

1
28.01.2020, 02:41

Теги

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