Почему "lxsession&" через "ssh -X" делает Ubuntu отличным даже после отключения?
Я работал с моей Raspberry Pi, и в итоге я испортил свою машину с Ubuntu. я ssh -X
Я заходил в Pi с моего рабочего стола Ubuntu 14.04 и пытался запустить графический сеанс на pi, чтобы я мог видеть его с пересылкой X11. Я побежал startx
и это привело к ошибке, поэтому, оглядываясь вокруг, я увидел эту дискуссию на raspberrypi.org и (не особо зная, что я делаю) попытался lxsession&
,
Это изменило Ubuntu так, что оно выглядело как какая-то версия Windows, с панелью задач в нижней части экрана и другим видом всех моих программ, особенно заметны вкладки в моих веб-браузерах. Это сохранилось после того, как я закрыл сеанс Pi (за исключением панели задач: она исчезла).
Вот что я сделал в терминале:
pi@raspberrypi ~ $ startx
X.Org X Server 1.12.4
Release Date: 2012-08-27
X Protocol Version 11, Revision 0
Build Operating System: Linux 3.2.0-2-mx5 armv7l Debian
Current Operating System: Linux raspberrypi 3.18.7+ #755 PREEMPT Thu Feb 12 17:14:31 GMT 2015 armv6l
Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708.boardrev=0xe bcm2708.serial=0xc4895bc4 smsc95xx.macaddr=B8:27:EB:89:5B:C4 bcm2708_fb.fbswap=1 sdhci-bcm2708.emmc_clock_freq=250000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000 dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Build Date: 11 February 2015 09:31:17PM
xorg-server 2:1.12.4-6+deb7u6 (Julien Cristau <jcristau@debian.org>)
Current version of pixman: 0.33.1
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Fri Apr 24 02:10:24 2015
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
FATAL: Module g2d_23 not found.
^Cxinit: connection to X server lost
waiting for X server to shut down Server terminated successfully (0). Closing log file.
xinit: unexpected signal 2
pi@raspberrypi ~ $ lxsession&
[1] 2290
pi@raspberrypi ~ $
(lxpanel:2297): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-can-change-accels after class was initialised
(lxpanel:2297): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-menu-popup-delay after class was initialised
(lxpanel:2297): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-menu-popdown-delay after class was initialised
** (lxpolkit:2301): CRITICAL **: polkit_agent_listener_register_with_options: assertion 'POLKIT_IS_SUBJECT (subject)' failed
(lxpolkit:2301): GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
(lxpanel:2297): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-menu-images after class was initialised
(lxpanel:2297): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-label-select-on-focus after class was initialised
pi@raspberrypi ~ $ Openbox-Message: A window manager is already running on screen 0
(lxpanel:2297): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-button-images after class was initialised
(pcmanfm:2298): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-can-change-accels after class was initialised
(pcmanfm:2298): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-menu-popup-delay after class was initialised
(pcmanfm:2298): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-menu-popdown-delay after class was initialised
(pcmanfm:2298): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-label-select-on-focus after class was initialised
(pcmanfm:2298): GLib-GObject-WARNING **: Attempt to add property GtkSettings::gtk-menu-images after class was initialised
tray: another systray already running
^C
pi@raspberrypi ~ $ sudo shutdown -h now
Broadcast message from root@raspberrypi (pts/0) (Fri Apr 24 02:22:27 2015):
The system is going down for system halt NOW!
pi@raspberrypi ~ $ Connection to 192.168.254.7 closed by remote host.
Connection to 192.168.254.7 closed.
max@max-ubuntu:~$ ^C
max@max-ubuntu:~$ man lxsession
No manual entry for lxsession
max@max-ubuntu:~$ lxsession -help
The program 'lxsession' is currently not installed. You can install it by typing:
sudo apt-get install lxsession
max@max-ubuntu:~$ lxsession& -help
[1] 25443
No command '-help' found, did you mean:
Command 'dhelp' from package 'dhelp' (universe)
-help: command not found
max@max-ubuntu:~$ The program 'lxsession' is currently not installed. You can install it by typing:
sudo apt-get install lxsession
ok
ok: command not found
[1]+ Exit 127 lxsession
[1]+ Exit 127 lxsession
Что вызывает эту проблему и как ее можно исправить? Будет ли перезагрузка на машине с Ubuntu вернуть внешний вид Ubuntu, или она станет постоянной?
Вот так выглядит мой браузер Firefox. Наиболее заметно, что вкладки и полосы прокрутки выглядят по-разному:
РЕДАКТИРОВАТЬ: я исправил это путем перезагрузки, но мне все равно было бы интересно узнать, почему это происходит.
3 ответа
Исправление
Перезагрузка достаточно, чтобы исправить это, но не обязательно. Вы можете исправить свой рабочий стол, выйдя из системы и снова войдя в систему. Это можно сделать в уязвимой системе, то есть в системе, рабочий стол которой был испорчен, в системе Ubuntu, которая использовалась в качестве клиента SSH, а не в Rapsberry Pi, которая была SSH сервер. Обратите внимание, что блокировка и разблокировка экрана не будут работать, но достаточно выйти из системы.
Если вы используете Unity, скорее всего, он работает compiz --replace
на зараженной машине также будет работать и избежать необходимости выхода из системы, но я рекомендую выйти и вернуться обратно.
Перезагрузка исправила проблему, потому что она включала выход из системы и обратно. Это нормально, но не обязательно.
Что случилось
Когда вы используете ssh -X
и запустить графическую программу, программу:
- работает на SSH-сервере (здесь Raspberry Pi)
- отображается на клиенте SSH (здесь ваша система Ubuntu)
LXSession - менеджер сеансов LXDE. Бег lxsession
на сервере SSH изнутри ssh -X
сеанс запускает графический сеанс LXDE на сервере с использованием дисплея клиента. Это приводит к двум основным изменениям, которые вы заметили:
lxsession
работает lxpanel
, LXDE использует LXPanel в качестве своей панели. Она несколько напоминает панель задач Windows тем, что имеет единственную панель по умолчанию к нижнему краю экрана, которая, если не настроена, имеет (a) одно вложенное меню, открываемое с левого края панели, из которого приложения размещаются в группы, и (б) список окон внутри самой панели, который облегчает переключение между приложениями.
lxsession
работает openbox
, LXDE использует Openbox в качестве оконного менеджера (см. Также эту статью и эту страницу). Менеджеры окон контролируют, как отображаются окна; они позволяют переключать, перемещать и изменять размеры окон; и они обеспечивают границы и стиль. Ваш интерфейс Unity использует оконный менеджер Compiz. Поскольку он был подключен к дисплею на SSH-клиенте, openbox
экземпляр, работающий на сервере SSH, попытался управлять окнами на клиенте SSH.
При завершении работы и отключении от сервера SSH все программы, работающие на сервере SSH, которые использовали отображение клиента SSH, останавливались. Панель исчезла, как вы заметили. Openbox также прекратил попытки управлять окнами на SSH-клиенте, но он уже вытеснил Compiz.
Другие возможные исправления
Это были два основных изменения, но, вероятно, не единственные. Если бы вы действительно хотели знать все lsession
запустив, вы можете ознакомиться с его документацией и прочитать конфигурационные файлы на Raspberry Pi, которую он использует, или вы можете попробовать воспроизвести проблему и запустить pstree
на сервере SSH, чтобы увидеть все lxsession
началось. Но это не обязательно. Выйти и вернуться достаточно, чтобы снова все исправить. Перезагрузка, как вы сделали, также достаточно.
Поскольку основная проблема заключалась в том, что Compiz больше не работал должным образом, работает compiz --replace
в вашей системе Ubuntu (клиент SSH) исправили бы это. Но выйти из системы и вернуться к ней легко, просто, и вам не нужно тратить больше времени на анализ проблемы.
Почему ты не нашел lxsession
на клиенте SSH
После того, как вы закрыли соединение с Raspberry PI (SSH-сервер), вы попробовали команды man lxsession
а также lxsession
в вашей системе Ubuntu, которая была клиентом SSH. Однако у вас не было этой man-страницы или исполняемого файла, потому что lxsession
не был установлен или запущен на клиенте SSH. Он работал на сервере SSH, и некоторые программы, которые он запускал, влияли на клиента SSH.
Если это была система Lubuntu, или вы установили LXDE иным образом, или lxsession
в частности - тогда вы сможете просмотреть страницу руководства и запустить программу. Это не обязательно была бы та же версия lxsession
как у вас на Raspberry Pi. Вы можете попробовать SSHing к Raspberry Pi и запустить man lxsession
там. (Если вы не пытаетесь воспроизвести проблему, я рекомендую не запускать lxsession
на Raspberry Pi.)
Что ты хотел сделать
Вы можете запустить X11 в Ubuntu без менеджера сеансов или даже оконного менеджера, и вы можете запустить ssh -X
а потом lxsession
на малиновом пи. Если у вас уже не запущен сеанс X, ваш рабочий стол не будет нарушен. Но я сомневаюсь, что это то, что вы хотите. Вы, вероятно, хотите одну из трех вещей:
- Для запуска отдельных графических программ, которые установлены на сервере SSH через
ssh -X
, В этом случае просто запустите эти программы, например,xclock
,firefox
,libreoffice
, SSH перенаправит их в GUI на SSH-клиенте. (Если вы хотите иметь возможность отключиться и повторно подключиться, не выходя из программы, то один из следующих двух вариантов может вас заинтересовать, но посмотрите этот ответ и этот.) - Чтобы запустить постоянный графический рабочий стол на сервере SSH, от которого вы можете отключиться и подключиться, не завершая и не перезапуская сеанс рабочего стола. В этом случае вам не нужны такие программы, как
lxsession
быть ограниченным одним сеансом SSH или напрямую использовать и полагаться на дисплей клиента SSH. В этой ситуации одно из решений состоит в том, чтобы поддерживать графический рабочий стол на сервере SSH и подключаться к нему с клиента. Это можно сделать, например, с помощью VNC или xrdp. ( Remmina является популярным клиентом.) Читателям, возможно, придется задавать новые вопросы в зависимости от их конкретной ситуации, но посмотрите, как настроить сеанс xrdp, в котором повторно используется существующий сеанс? - Чтобы сервер SSH полностью управлял рабочим столом на клиенте SSH. Если вы действительно этого хотите, и вы уже используете графический интерфейс на клиенте, который вы не хотите нарушать - что с вами произошло, - тогда вы можете одновременно запустить второй X-сервер на SSH клиент. Я думаю, что из этих трех вариантов вы меньше всего захотите - хотя это наиболее похоже на то, что вы сделали, - и конкретные детали того, как это сделать, выходят за рамки этого ответа. Но посмотрите этот вопрос и этот.
Это произошло потому, что вы не просто
lxsession
.
Когда вы ставите в конце команду, она будет работать в фоновом режиме, поэтому, когда вы закрыли сеанс, процесс все еще был активен.
Вот почему перезагрузка исправила это, так как все процессы были закрыты. включая фоновые, которые вы создали, например
lxsession&
.
Может быть, в следующий раз попробуйте запустить его без
&
.
Перезагрузка устраняет проблему, снова давая мне нормальный экран:
Однако, когда я перезагружался, мне на мгновение показывали гигантскую малину на моем рабочем столе, как это было видно при выключении Pi с графическим интерфейсом. (В этот момент Raspberry Pi был выключен и отключен на некоторое время.)
Так что, если у кого-то есть эта проблема, перезагрузка компьютера исправит это.