为什么通过“ssh -X”进行的“lxsession&”即使断开连接后也会让 Ubuntu 看起来不同?

为什么通过“ssh -X”进行的“lxsession&”即使断开连接后也会让 Ubuntu 看起来不同?

我正在使用我的 Raspberry Pi,结果弄乱了我的 Ubuntu 机器。我ssh -X从我的 Ubuntu 14.04 桌面进入 Pi,并试图在 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 <[email protected]>) 
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 浏览器现在的样子。最明显的是,标签和滚动条看起来不同:

这些标签看起来不像普通的 Ubuntu。

编辑:我通过重新启动解决了这个问题,但我仍然想知道为什么会发生这种情况。

答案1

修复

重新启动足以解决此问题,但不是必须的。您可以通过注销并重新登录来修复您的桌面。您可以在受影响的系统上执行此操作,即桌面混乱的系统,用作 SSH 客户端的 Ubuntu 系统,不是作为 SSH 服务器的 Rapsberry Pi。请注意,仅锁定和解锁屏幕不起作用 - 但注销就足够了。

如果您使用的是 Unity,它很可能compiz --replace在受影响的机器上运行,并且无需注销,但我建议注销并重新登录。

重新启动解决了该问题,因为它涉及注销并重新登录。没关系,但这不是必要的。


发生了什么

当你使用ssh -X并运行图形程序,该程序:

  • 运行在 SSH 服务器上(这里是 Raspberry Pi)
  • 显示器在 SSH 客户端上(这里是您的 Ubuntu 系统)

LX会话激光去极化仪的会话管理器。正在运行lxsession在 SSH 服务器上从ssh -X会话内部启动服务器上的图形 LXDE 会话使用客户端的显示器。这会产生您注意到的两个主要变化:

lxsession运行lxpanelLXDE 用途面板作为其面板。它有点类似于 Windows 任务栏,因为它有一个默认位于屏幕下边缘的面板,除非自定义,否则(A)可从面板左边缘打开的单个嵌套菜单,其中应用程序按组放置,(二)面板内部的窗口列表,方便在应用程序之间切换。

lxsession运行openboxLXDE 用途开箱就像它一样窗口管理器(也可以看看本文这一页)。窗口管理器控制窗口的显示方式;它们允许您切换、移动和调整窗口大小;它们提供边框和样式。您的统一接口使用康比兹窗口管理器。由于连接到 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 客户端。但是,您没有该手册页或可执行文件,因为 SSH 客户端上lxsession没有安装或运行它。它在 SSH 服务器上运行,它运行的某些程序影响了 SSH 客户端。

如果这是一个鲁本图系统或以其他方式安装了 LXDE——或者lxsession具体来说——那么你将能够查看手册页并运行该程序。这不一定是lxsession您在 Raspberry Pi 上安装的版本。您可以尝试通过 SSH 连接到 Raspberry Pi 并man lxsession在那里运行。(除非您想重现该问题,否则我建议不要lxsession在 Raspberry Pi 上运行。)


你想做什么

可以在 Ubuntu 上运行 X11,无需会话管理器,甚至无需窗口管理器,你可以ssh -X然后在 Raspberry Pi 上运行lxsession。由于没有像现有 X 会话那样正在运行,因此您的桌面不会受到干扰。但我怀疑这是否是你想要的。你可能想要以下三件事之一:

  • 运行单独的图形程序通过 安装在 SSH 服务器上的程序ssh -X。在这种情况下,只需运行这些程序,例如,,,xclockfirefoxSSHlibreoffice会将它们转发到 SSH 客户端上的 GUI。(如果您希望能够在不退出程序的情况下断开连接并重新连接,那么接下来的两个选项之一可能会让您感兴趣,但请参阅这个答案那个
  • 运行持久图形桌面在 SSH 服务器上,您可以断开连接并连接到它,而无需结束和重新启动桌面会话。在这种情况下,您不会希望程序lxsession仅限于一个 SSH 会话或直接使用和依赖 SSH 客户端的显示。在这种情况下,一种解决方案是让图形桌面在 SSH 服务器上运行并从客户端连接到它。例如,可以使用虚拟网络计算机或者偏磷酸钠。 (雷米娜是一个受欢迎的客户端。)读者可能需要根据自己的具体情况提出新问题,但请参阅如何设置重用现有会话的 xrdp 会话?
  • 使 SSH 服务器完全管理 SSH 客户端上的桌面。如果你真的想要这个,并且你已经在客户端上使用 GUI,并且你不想被打乱——这就是你所发生的事情——那么你可以运行第二X 服务器。在这三个选项中,我认为这是你最不可能想要的——尽管它与你所做的最相似——具体如何做的细节超出了这个答案的范围。但请参阅这个问题那个

答案2

那是因为你lxsession&不仅仅lxsession……

当您将其放在&命令末尾时,它将在后台运行,因此当您关闭会话时,该过程仍然处于活动状态。

这就是为什么重新启动可以修复它,因为所有进程都被关闭了,包括您创建的后台进程lxsession&

也许下次尝试在不使用的情况下运行它&

答案3

重新启动可以解决问题,并再次提供正常屏幕:

已修复,Ubuntu 外观正常

但是,当我重新启动时,桌面上会瞬间出现一个巨大的树莓派,就像在关闭 Pi 并启动 GUI 时看到的那样。(此时,树莓派已关闭并断开连接很长一段时间。)

因此,如果有人遇到这个问题,重新启动计算机就可以解决它。

相关内容