我正在使用我的 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 浏览器现在的样子。最明显的是,标签和滚动条看起来不同:
编辑:我通过重新启动解决了这个问题,但我仍然想知道为什么会发生这种情况。
答案1
修复
重新启动足以解决此问题,但不是必须的。您可以通过注销并重新登录来修复您的桌面。您可以在受影响的系统上执行此操作,即桌面混乱的系统,用作 SSH 客户端的 Ubuntu 系统,不是作为 SSH 服务器的 Rapsberry Pi。请注意,仅锁定和解锁屏幕不起作用 - 但注销就足够了。
如果您使用的是 Unity,它很可能compiz --replace
在受影响的机器上运行,并且无需注销,但我建议注销并重新登录。
重新启动解决了该问题,因为它涉及注销并重新登录。没关系,但这不是必要的。
发生了什么
当你使用ssh -X
并运行图形程序,该程序:
- 运行在 SSH 服务器上(这里是 Raspberry Pi)
- 显示器在 SSH 客户端上(这里是您的 Ubuntu 系统)
LX会话是激光去极化仪的会话管理器。正在运行lxsession
在 SSH 服务器上从ssh -X
会话内部启动服务器上的图形 LXDE 会话使用客户端的显示器。这会产生您注意到的两个主要变化:
lxsession
运行lxpanel
。LXDE 用途面板作为其面板。它有点类似于 Windows 任务栏,因为它有一个默认位于屏幕下边缘的面板,除非自定义,否则(A)可从面板左边缘打开的单个嵌套菜单,其中应用程序按组放置,(二)面板内部的窗口列表,方便在应用程序之间切换。
lxsession
运行openbox
。LXDE 用途开箱就像它一样窗口管理器(也可以看看本文和这一页)。窗口管理器控制窗口的显示方式;它们允许您切换、移动和调整窗口大小;它们提供边框和样式。您的统一接口使用康比兹窗口管理器。由于连接到 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
。在这种情况下,只需运行这些程序,例如,,,xclock
。firefox
SSHlibreoffice
会将它们转发到 SSH 客户端上的 GUI。(如果您希望能够在不退出程序的情况下断开连接并重新连接,那么接下来的两个选项之一可能会让您感兴趣,但请参阅这个答案和那个。 - 运行持久图形桌面在 SSH 服务器上,您可以断开连接并连接到它,而无需结束和重新启动桌面会话。在这种情况下,您不会希望程序
lxsession
仅限于一个 SSH 会话或直接使用和依赖 SSH 客户端的显示。在这种情况下,一种解决方案是让图形桌面在 SSH 服务器上运行并从客户端连接到它。例如,可以使用虚拟网络计算机或者偏磷酸钠。 (雷米娜是一个受欢迎的客户端。)读者可能需要根据自己的具体情况提出新问题,但请参阅如何设置重用现有会话的 xrdp 会话? - 使 SSH 服务器完全管理 SSH 客户端上的桌面。如果你真的想要这个,并且你已经在客户端上使用 GUI,并且你不想被打乱——这就是你所发生的事情——那么你可以运行第二X 服务器。在这三个选项中,我认为这是你最不可能想要的——尽管它与你所做的最相似——具体如何做的细节超出了这个答案的范围。但请参阅这个问题和那个。
答案2
那是因为你lxsession&
不仅仅lxsession
……
当您将其放在&
命令末尾时,它将在后台运行,因此当您关闭会话时,该过程仍然处于活动状态。
这就是为什么重新启动可以修复它,因为所有进程都被关闭了,包括您创建的后台进程lxsession&
。
也许下次尝试在不使用的情况下运行它&
。
答案3
重新启动可以解决问题,并再次提供正常屏幕:
但是,当我重新启动时,桌面上会瞬间出现一个巨大的树莓派,就像在关闭 Pi 并启动 GUI 时看到的那样。(此时,树莓派已关闭并断开连接很长一段时间。)
因此,如果有人遇到这个问题,重新启动计算机就可以解决它。