考虑一下我在我的 PC 上的不同时间使用两个用户。如果我从一个切换到另一个,它们都需要导致交换的 ram。
一种解决方案是注销一个用户,然后登录到另一个用户 (Gnome|KDE|xfce|...) 并希望一切都恢复。检查所有正确打开的内容似乎很耗时。
除了这些,是否可以休眠和恢复会话以便会话可以轻松继续?
考虑一下我在我的 PC 上的不同时间使用两个用户。如果我从一个切换到另一个,它们都需要导致交换的 ram。
一种解决方案是注销一个用户,然后登录到另一个用户 (Gnome|KDE|xfce|...) 并希望一切都恢复。检查所有正确打开的内容似乎很耗时。
除了这些,是否可以休眠和恢复会话以便会话可以轻松继续?
我的 Linux 安装在便携式 SSD 上,因此我可以轻松切换设备(家里的笔记本电脑,办公室的台式机),而无需考虑任何同步问题。这称为 Linux To Go。
已经很不错了,但还能更好吗?
要在工作流程中切换设备,我必须(优雅地)退出所有应用程序,完全关闭操作系统,然后分离并连接 SSD,启动操作系统,等待其通电,最后重新打开所有需要恢复的应用程序我的工作。
现在我想找到一种方法来实现“暂停和恢复”,而不是这样的“停止和重新启动”。我希望操作系统内存能够在不同的设备上持续存在。
似乎休眠是一个潜在的解决方案。也许我可以通过休眠操作系统将内存保存在交换分区中,然后分离并连接 SSD,启动操作系统,很快,内存就会恢复,这样我就可以继续我的工作流程了。
但经过一番谷歌搜索后,我找不到任何关于跨多个设备休眠的教程/博客。
如何休眠 Linux To Go 到磁盘并在不同的设备上恢复它?或者,这根本不可能?
我有一台装有最新版本 Linux Mint 的笔记本电脑。我设置了一个交换分区并且运行pm-hibernate
正常(启动时关闭并恢复)。但是,在电源管理设置中,“当电池电量严重不足时”休眠不是一个选项。
我查看了 Python 配置程序 ( /usr/share/cinnamon/cinnamon-settings/modules/cs_power.py
),似乎有一段代码可以检查是否可以休眠:
def get_available_options(up_client):
can_suspend = False
can_hibernate = False
can_hybrid_sleep = False
# Try logind first
try:
connection = Gio.bus_get_sync(Gio.BusType.SYSTEM, None)
proxy = Gio.DBusProxy.new_sync(
connection,
Gio.DBusProxyFlags.NONE,
None,
"org.freedesktop.login1",
"/org/freedesktop/login1",
"org.freedesktop.login1.Manager",
None)
can_suspend = proxy.CanSuspend() == "yes"
can_hibernate = proxy.CanHibernate() == "yes"
can_hybrid_sleep = proxy.CanHybridSleep() == "yes"
except:
pass
# Next try ConsoleKit
try:
connection = Gio.bus_get_sync(Gio.BusType.SYSTEM, None)
proxy = Gio.DBusProxy.new_sync(
connection,
Gio.DBusProxyFlags.NONE,
None,
"org.freedesktop.ConsoleKit",
"/org/freedesktop/ConsoleKit/Manager",
"org.freedesktop.ConsoleKit.Manager",
None)
can_suspend = can_suspend or (proxy.CanSuspend() == "yes")
can_hibernate = can_hibernate or (proxy.CanHybridSleep() == "yes")
can_hybrid_sleep = can_hybrid_sleep or (proxy.CanHybridSleep() == "yes")
except:
pass
def remove(options, item):
for option in options:
if option[0] == item:
options.remove(option)
break
lid_options = [
("suspend", _("Suspend")),
("shutdown", _("Shutdown immediately")),
("hibernate", _("Hibernate")),
("blank", _("Lock Screen")),
("nothing", _("Do nothing"))
]
button_power_options = [
("blank", _("Lock Screen")),
("suspend", _("Suspend")),
("shutdown", _("Shutdown immediately")),
("hibernate", _("Hibernate")),
("interactive", _("Ask")),
("nothing", _("Do nothing"))
]
critical_options = [
("shutdown", _("Shutdown immediately")),
("hibernate", _("Hibernate")),
("nothing", _("Do nothing"))
]
if not can_suspend:
for options in lid_options, button_power_options, critical_options:
remove(options, "suspend")
if not can_hibernate:
for options in lid_options, button_power_options, critical_options:
remove(options, "hibernate")
return lid_options, button_power_options, critical_options, can_suspend, can_hybrid_sleep
如果我在此代码之后设置can_hibernate
为True
,则会出现该选项,但它不起作用。电量不足时如何设置休眠?
我有一台带有 Gentoo 和 OpenRC 的戴尔 Inspiron 笔记本电脑。通过 gui 或键盘进入休眠和挂起没有问题。它也可以正常恢复。
我已配置xfce4-power-manager
为通过盖子事件使其进入睡眠和休眠状态。最令人着迷的事情来了:它像正常一样醒来,但它的屏幕是黑色的。它完全是黑色的,醒来时根本没有打开它。
看起来它可以很好地暂停和从键盘睡眠按钮或通过 gui 唤醒,在这种情况下,它可以正确地打开屏幕,但是有盖子 - 由于某种原因它不会打开屏幕。
发生这种情况时,我可以通过 HDMI 连接显示器并从中手动启用笔记本电脑屏幕,就像在这个问题中一样。然而,在我的情况下,这只有在通过盖子触发 syspend/hibernate 时才会发生。
检查日志我发现通过盖子或键盘挂起该系统没有任何区别。从日志的角度来看,在这两种情况下,恢复都发生了相同的情况,系统也可以正常运行,除了带盖的情况下禁用了屏幕。
我尝试过制作ACPI
Video
内置的、Brightness
内置的模块,尝试从内核中完全禁用EFI FB
,但没有任何帮助。还尝试使用亮度键和“监视器选择”Fn键启用屏幕,也没有任何运气。尝试安装vbetool
。这不仅无助于解决这个问题,而且完全打破了暂停和休眠。
鉴于观察结果,看起来某些东西(硬件或软件)应该打开屏幕,但对于盖子事件,它不能正常或及时地工作。
鉴于盖子事件的恢复,是什么负责启用屏幕?这个使能的时间是如何控制的?我是否缺少一些对盖子负责的内核模块?为了视频?用于开屏?
鉴于我以后可以通过 HDMI 手动启用屏幕,我可以将此操作添加到恢复脚本吗?我怎么做?“启用嵌入式屏幕/屏幕:0”命令会是什么样的?
我目前在 Linux Mint 19.1 上,它默认使用交换文件而不是交换分区。包括暂停在内的一切工作正常。但是休眠后恢复不起作用。我的配置如下/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=38c97b08-a1d5-44b5-9e96-afca13595fe2 resume_offset=27854848"
whereUUID
是交换文件所属的根分区, resume_offset 是交换文件的偏移量。系统成功休眠。但在下一次启动时,它显示从 UUID 位置恢复,突然屏幕变黑(见此)。之后系统没有任何反应。我已经完成了以下线程,但似乎没有任何效果。
完整的系统详细信息可以在这里找到
我禁用了安全启动,目前在内核 4.18 上。有没有人使用交换文件成功实现休眠,或者知道为什么休眠不起作用?
我正在使用内核 4.4.0-116-generic(但早期版本也是如此)和 16 GB RAM 运行 XUbuntu 16.04。我使用的是“传统”硬盘驱动器(无 SSD),而我的 swappiness 为 0(RAM 很少满)。
我在休眠时遇到了以下情况:休眠正常需要不到 2 分钟,但从它恢复需要很多很多时间,直到应用程序响应(今天需要 10 多分钟才能到达 light-locker 提示)。
我不认为这是可用的(从休眠状态恢复比启动到新会话并重新打开程序需要更多时间)。
我怎样才能提高性能?我是唯一遇到这些问题的人吗?
诚然,现在的内存使用量是 8.8 GB,但让我烦恼的是休眠和恢复时间之间的差异。我从其他问题中了解到,这可能是因为在休眠期间,内核冻结了所有进程并将 RAM 整块转储到交换,而在恢复时它只是让进程在交换中请求它们的页面。
这是一个有效的解释吗?如果是这样,为什么要这样做,因为从硬盘驱动器读取大块比随机访问更快?我可以将休眠配置为不以这种方式进行吗?问题“在从休眠状态恢复时恢复内存中/交换页面状态”似乎相关,但我不知道足够多的页面来真正理解它们是否在做什么(“注意标记哪些页面在磁盘上和在RAM,然后在恢复时恢复这个确切的状态”)很有用,我也不知道该怎么做。