Когда Вы настраиваете использование проводной сети /etc/network/interfaces
, Вы говорите Администратору сети не касаться его. Существует некоторая документация этого в статье Debian Wiki NetworkManager.
Так, чтобы заставить его работать, Ваш лучший выбор состоит в том, чтобы, вероятно, удалить (или прокомментировать) Ваша конфигурация в/etc/network/interfaces (за исключением lo), и полностью используйте Администратора сети. Вы, вероятно, захотите сделать их системными соединениями, таким образом, они смогут произойти перед входом в систему.
С другой стороны, Вы могли установить managed=true
как показано в Wiki.
Похоже, что узел linux настроен как какой-то шлюз RDP. Команда инициирует сеанс SSH ( root @ localhost
), запускает локальный прослушиватель на порте 3300 ( L 3300:
), чтобы переслать весь трафик на машину Windows на порте 3389 ( remote _ WIN _ machine1: 3389
), типичном для RDP.
Я подозреваю, что директива GatewayPorts
имеет набор yes в /etc/ssh/sshd _ config
, поэтому прослушиватель принимает и пересылает трафик с удаленных узлов на узел Windows. В этом случае удаленный узел может получить доступ к узлу Windows через этот узел linux, запустив сеанс удаленного рабочего стола как rdesktop -u username linuxhost: 3300
Насколько мне известно, можно добавить сети с тем же essid. Сделайте это дважды с разными паролями или используйте подключение power lan. Оба должны работать.
-121--197932- Вы можете попытаться использовать loginctl list-sessions
для получения списка сеансов, а затем использовать loginctl show-session -p Display -p Active < идентификатор сеанса >
для получения X11 дисплея
Что-то вроде этого (в bash):
TARGET_DISPLAY=()
while read id uid user seat; do
while IFS='=' read property value; do
case "$property" in
Active)
if [[ "$value" != "yes" ]]; then continue; fi
;;
Display)
if [[ "$value" ]]; then
TARGET_DISPLAY+=( "$value" )
fi
# else the session isn't graphical
;;
esac
done < <(loginctl show-session -p Display -p Active "$id")
done < <(loginctl list-sessions --no-legend)
Здесь $ TARGET _ ДИСПЛЕЙ
- массив, потому что гипотетически может быть несколько активных сеансов (в многоместной системе). Если это невозможно в конфигурации, можно сделать ее простой переменной и добавить инструкцию break 2
после назначения для выхода из обоих циклов.
... это больше не работает с GDM, потому что в этом случае сервер X запускается внутри сессии (с правами пользователя) и /usr/bin/gdm-x-session
не передает эту информацию обратно в logind
(из-за отсутствия API для этого).
В других случаях (когда сервер X запускается DM перед созданием сеанса) это, скорее всего, будет работать. Я не знаю о каких-либо других методах, извините.
Ну, поскольку в данный момент я имею в виду активный Отображение XOrg сервера. Помните, что у нас может быть запущено несколько XOrg-серверов, и они могут быть мультиголовыми, что усложняет работу.
Другое важное замечание заключается в том, что в некоторых случаях невозможно получить доступ к переменной DISPLAY (например, systemd).
После некоторого обсуждения в commandlinefu, я получил следующий результат:
for p in $(pgrep -t $(cat /sys/class/tty/tty0/active));
do
d=$(awk -v RS='\0' -F= '$1=="DISPLAY" {print $2}' /proc/$p/environ 2>/dev/null);
[[ -n $d ]] && break;
done;
echo $d
Этот фрагмент итерации проходит над списком всех процессов (на самом деле их ID), где установлен управляющий терминал и соответствует терминалу этого процесса. Он проверяет окружение каждого процесса на наличие переменной DISPLAY
и удовлетворяется, как только находит ее. Найдя переменную DISPLAY
, он прекращает итерацию списка и echo
s результата.
Это выведет на печать активный дисплей, который запустит скрипт.
Следующий сценарий перечисляет имя пользователя и номер дисплея для вошедших в систему пользователей, когда соответствующий терминал активен.
w -hs | \
awk -v tty="$(cat /sys/class/tty/tty0/active)" \
'$2 == tty && $3 != "-" {print $1 FS $3}'
Result:
myuser :0
Вот пример с двумя серверами, работающими на одном хосте. Я использовал startx
для запуска их обоих, как вы можете видеть из вывода pstree -pl
ниже. Первый дочерний процесс с набором $DISPLAY
— .xinitrc
:
|-login(698)---zsh(1077)---startx(1359)---xinit(1381)-+-.xinitrc(1386)...
Это приказ; если у вас другие настройки, вы можете изменить .xinitrc
на что-то другое здесь:
$ pgrep.xinitrc | while read i; do \
d=$(cat /proc/$i/environ | tr '\0' '\n' | grep DISPLAY); \
echo -n $d" "; eval $d xprintidle; \
done | sort -n -k 2
DISPLAY=:1 93
DISPLAY=:0 603301
Цифры показывают время бездействия каждого дисплея в миллисекундах. В верхней строке отображается последний активный (экран с наименьшим бездействием ).
Как бы то ни было, ни один из других ответов мне не помог.