Я могу подключить процесс GUI к “суррогатному X-серверу”?

cp a b && mv b c && rm a & корректно. & имеет более низкий приоритет, чем &&.Действительно? & имеет более низкий приоритет, чем что-нибудь кроме ; и новая строка: & находится в той же синтаксической категории как ;, причем различие - это ; выполняет список команд на переднем плане в то время как & выполнения это в фоновом режиме. Можно протестировать это на себя:

$ dash -c 'sleep 2 && echo waited & echo backgrounded'
backgrounded
$ waited

То же с pdksh, ksh93, удар, csh, tcsh.

Исключением является zsh, который является странно несовместимым. Это документируется в руководство:

Если подсписок завершается a &, &|, или &!, оболочка выполняет последний конвейер в нем в фоновом режиме и не ожидает его для окончания (отметьте различие от других оболочек, которые выполняют целый подсписок в фоновом режиме).

К сожалению, zsh ведет себя таким образом даже в sh или ksh режиме эмуляции. Чтобы удостовериться, что целая команда выполняется в фоновом режиме, помещает фигурные скобки или круглые скобки вокруг этого. Круглые скобки создают подоболочку, тогда как фигурные скобки не делают, но это не важно (за исключением микрооптимизации в некоторых оболочках), так как фоновая команда находится в подоболочке так или иначе.

{ cp a b && mv b c && rm a; } &

4
24.11.2014, 17:37
2 ответа

Теоретически, программа, потерявшая соединение с X-сервером, может просто попробовать переподключиться, пока не появится новый X-сервер. На самом деле, я писал программы, которые делают это. Для этого нужен дополнительный код, потому что Вам нужно заново запустить процедуру инициализации GUI, чтобы воссоздать Ваши ресурсы (окна, битовые карты, шрифты и т.д.) на новом X-сервере, и обновить все внутренние структуры данных Вашей программы, чтобы использовать эти новые ресурсы.

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

Как упоминал XTaran, существует аккуратная программа ретрансляции/шиммирования/прокси под названием ''xpra'', которая действует как X-сервер для клиентов, а затем может выполнять повторную инициализацию их ресурсов в любой другой X-сервер, позволяя Вам перемещать все программы между X-серверами так, как Вы хотели. Когда я использовал его 10 лет назад, в нем было много ошибок. Я уверен, что с тех пор они продвинулись, но Вам необходимо выяснить, достаточно ли стабилен он для ежедневного использования на рабочем столе.

2
27.01.2020, 20:58

X0VNCSERVER (в Debian и Ubuntu в пакете VNC4Server ) может помочь восстановить доступ к разбитому или, по крайней мере, не более доступным X сеансом, например, С X0VNCSERVER Дисплей =: 0 .

, а затем есть XPRA , который , который позволяет пользователю просматривать удаленные приложения X на их локальной машине и отключить и снова подключиться к удаленному компьютеру, не теряя состояния беговых приложений Согласно описанию пакета XPRA Debian.

Может быть, один из двух инструментов помогает (если помощь не слишком поздно).

1
27.01.2020, 20:58

Теги

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