当前位置: 首页>>技术问答>>正文


如何为应用程序保存/记住last-used窗口位置和大小?

, , , ,

问题描述

当我登录Ubuntu时,我希望在之前的会话(主要是终端和Firefox)上打开的所有窗口都是re-opened自动处于相同的大小和位置。

如何进行?

最佳解决方法

12.04(和11.10)

简短的回答是:休眠是最好的选择,因为gnome-session-save功能在11.04之后被移除,因为它是错误的,并且官方调整为手动re-enable这个功能似乎不起作用。本答案的B部分描述了如何使用替代休眠方法TuxOnIce,它现在比内置休眠更兼容和可靠。

A.尝试启用旧的Gnome会话保存功能

  • 注意:如最后所述,此官方调整似乎不起作用 – 您可能希望直接跳到B.使用TuxOnIce休眠

  • Launchpad bug讨论了恢复”save session”功能。它目前标有”fixed”,因为2012年4月在gnome-session软件包中引入了一个补丁,允许用户手动re-enable这一功能。该补丁将自身描述为:

    • 为那些想要使用保存会话的人添加GNOME_SESSION_SAVE环境变量,知道如果不明智地使用它会破坏你的系统(LP:#771896)

  • 您可以通过将GNOME_SESSION_SAVE变量设置为non-null值来启用此功能。这是如何做:

    • Alt+F2,键入gedit ~/.pam_environment,然后按enter键。

    • 在文件末尾添加GNOME_SESSION_SAVE=1行,如下所示:

    • gnome,startup,window-manager,display-manager,ubuntu

    • Ctrl+S保存,然后按Ctrl+Q退出编辑器。

    • 现在重新启动(注销也应该工作,但只是为了安全)

  • 修补程序(source)执行的操作是禁用“启动应用程序”中的“选项”选项卡,该选项卡用于包含“注销时记住正在运行的应用程序”选项。但它检查GNOME_SESSION_SAVE变量,如果设置(non-null),它应该启用session-saving,就像记住…框已存在并被选中一样。这就是为什么这个bug被标记为”fixed”

    • if(g_getenv(“GNOME_SESSION_SAVE”)!= NULL)maybe_load_saved_session_apps(经理);

    • 不幸的是,它似乎没有用,正如错误跟踪器中的comment 32所证实的那样。

    • 我甚至尝试禁用补丁并从源代码重建gnome-session。这会使“选项”复选框再次显示,但它不执行任何操作。

    • 但是,嘿,它可能以某种方式为你工作! 🙂


B.现在有用:使用TuxOnIce增强休眠

  • 休眠将当前系统状态(包括会话,应用程序打开等)保存到硬盘,然后关闭计算机。再次启动时,它会读取已保存的状态并将其恢复,就像您从未关闭计算机一样。这项技术主要用于笔记本电脑用户以节省电池电量,但也没有理由不能在台式电脑上使用。

  • Ubuntu支持在Ubuntu /Linux中可用,但在12.04中被禁用,因为它在许多系统上都无法正常工作。如果您想了解更多信息,请参阅this questionthis bugreport。更兼容的替代方案:TuxOnIce

  • TuxOnIce(wiki | homepage)是内核内置休眠技术的替代品,应该更兼容,更可靠,更灵活。

  • 它很容易安装,如果它不适合你,就像容易删除。

  • 它确实需要安装TuxOnIce的自定义内核,但是后面的说明应该很容易。如果您以前从未打开终端,您可能现在想:-) 0.要求TuxOnIce的唯一要求是您的交换分区至少与您拥有的内存量(RAM)一样大。您可以通过以下方式检查:

  • 使用Ctrl + Alt + T启动终端

  • 键入free -m,您应该看到如下内容:总共使用的免费共享缓冲区缓存内存:1024 731 260 0 0 190 – /+缓冲区/缓存:540 451交换:1536 6 1530

  • Swap:(例如1536)后的数字应大于Mem:后的数字(例如1024)

  • 如果不是这种情况,并且您的交换小于内存,则必须调整大小并增加交换分区的大小,或者将TuxOnIce配置为使用特殊的交换文件。这超出了这个答案的范围,但如果你在评论中提出另一个问题并提及它,我会回答并解释如何。 1.安装TuxOnIce内核

  • 使用Ctrl + Alt + T启动终端

  • 将以下内容复制并粘贴到终端中。这会添加TuxOnIce PPA并安装自定义内核和标头。

    • sudo apt-add-repository ppa:tuxonice /ppa -y,一旦加入ppa:

    • sudo apt-get更新sudo apt-get安装tuxonice-userui linux-generic-tuxonice -y sudo apt-get安装linux-headers-generic-tuxonice -y

  • 现在重启。

  • Ubuntu现在应该启动TuxOnIce内核。如果有任何问题,请在启动时按住Shift,您将获得Grub菜单。使用箭头键转到Previous Linux Versions,按Enter键,然后再次按Enter键返回工作内核。 2.测试休眠功能。

  • 打开一些您通常使用的应用程序,例如Firefox,Thunderbird,LibreOffice等

  • 使用Ctrl + Alt + T再次打开终端。

  • 键入sudo pm-hibernate,按enter键,输入您的密码。

  • 您应该看到锁定屏幕一秒钟,然后是TuxOnIce休眠进度屏幕,如下所示:

    • 如果TuxOnIce工作,您的计算机将关闭。

    • 再次启动,等待。 TuxOnIce应该从您休眠的点恢复,包括您在打开的位置打开的所有窗口。

  • 如果这一切都有效,请转到步骤3,它允许您从仪表板启用Hibernate。 3.从仪表板启用休眠

  • Alt + F2,键入以下内容然后按enter键:gksudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

  • 粘贴下面的内容,按Ctrl + S保存,然后按Ctrl + Q退出编辑器:[Re-enable默认休眠] Identity = unix-user:* Action = org.freedesktop.upower.hibernate ResultActive = yes

    gnome,startup,window-manager,display-manager,ubuntu

  • 重启,您应该看到如下所示的Hibernate选项:4。删除TuxOnIce

    • 如果TuxOnIce不适合您,或者您只是想删除它,请启动终端并输入:sudo apt-get删除tuxonice-userui linux-generic-tuxonice linux-headers-generic-tuxonice -y

    • 并记得在菜单中禁用Hibernate选项:sudo rm /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

    • 然后重启。

次佳解决方法

11.04及更早版本

试试这个

系统>启动应用程序>选项和检查注销时自动记住正在运行的应用程序并单击记住当前应用程序。

第三种解决方法

如何在Ubuntu 11.04或更高版本上保存会话:

  1. 下载并安装DConf-Editor.

  2. 在仪表板上键入dconf并运行它。

gnome,startup,window-manager,display-manager,ubuntu

按顺序打开下一个标签:org – > gnome

然后选择gnome-session

现在您应该看到auto-save-session选项如下图所示,将其激活。

gnome,startup,window-manager,display-manager,ubuntu

DONE!

现在,当您关闭计算机时,当前会话将自动保存。下次你转动它就像你离开时一样。

第四种方法

似乎不可能让所有应用程序记住它们的最后窗口位置和大小。这种行为似乎很久以前就被删除了。我的理解是应用程序负责记住自己的位置和大小。这就是谎言。

通过错误跟踪器进行搜索会产生许多报告,这些报告在某种程度上与此问题相关。

那么什么应用程序记住位置&大小和Ubuntu的哪些版本应用程序具有此功能?

注意:请编辑并填写您已针对此功能测试的Ubuntu的应用程序和版本。即应用程序记住窗口位置和/或大小。

请指定您测试过的Ubuntu版本,以及是否记住一个或两个窗口的帖子和大小。

13.04

窗口位置|尺寸

  • Y,Y – nautilus

  • N,Y – Firefox不稳定的多显示器位置

  • N,N – 终端终端具有自定义设置,以便每次都记住特定大小,但它不会记住最后一个位置

  • N,Y – chrome

  • Y,Y – 女妖

  • N, – – 计算器不可调整大小*

  • N,Y – Gedit

错误报告示例

以下是来自错误跟踪器中的一些简单搜索的一些随机错误报告,例如“remember window position”

2013

2012

2011

2009年

2008年

2007年

第五种方法

12.04

作为一种解决方法,您可以在12.04中对re-enable进行休眠并使用它关闭您的电脑,然后将所有应用程序仍在使用中将其唤醒。

输入终端:

sudo gedit /var/lib/polkit-1/localauthority/50-local.d/hibernate.pkla

然后将此字符串添加到文本文件中:

[Re-enable Hibernate]
Identity=unix-user:* Action=org.freedesktop.upower.hibernate
ResultActive=yes

这条路 :

gnome,startup,window-manager,display-manager,ubuntu

然后在关机菜单上再次显示休眠选项:

gnome,startup,window-manager,display-manager,ubuntu

希望它会有所帮助。

第六种方法

目前认为正确的会话保存/恢复功能是使用suspend或hibernate。我同意,如果他们没有开箱即用,那么休眠和暂停可能会让他们感到痛苦……

但看看……

CryoPID

CryoPID allows you to capture the state of a running process in Linux and save it to a file. This file can then be used to resume the process later on, either after a reboot or even on another machine.

CryoPID was spawned out of a discussion on the Software suspend mailing list about the complexities of suspending and resuming individual processes.

CryoPID consists of a program called freeze that captures the state of a running process and writes it into a file. The file is self-executing and self-extracting, so to resume a process, you simply run that file. See the table below for more details on what is supported.

特征

  • 可以作为普通用户运行! (不需要root权限)

  • 适用于2.4和2.6。

  • 适用于x86和AMD64。

  • 可以开始&多次停止一个过程

  • 可以在机器之间和内核版本之间迁移进程(在2.4到2.6和2.6到2.4之间测试)。

虽然最近发布的DEB是针对Heron而且该网站最后一次更新于2005年所以它可能没用。这是tarball:

还可以看看Tuxonice

TuxOnIce is most easily described as the Linux equivalent of Windows’ hibernate functionality, but better. It saves the contents of memory to disk and powers down. When the computer is started up again, it reloads the contents and the user can continue from where they left off. No documents need to be reloaded or applications reopened and the process is much faster than a normal shutdown and start up.

ppa:tuxonice/ppa 

PPA已经预编译了Ubuntu内核,其中已经编译了TuxOnIce,userui二进制文件和hibernate脚本。所以它可能不适合胆小的人。


有一个可能值得关注的解决方法:

  • 创建一个包含您打算打开的所有程序的脚本。或者创建这些脚本中的2,3,4,5,6并将密钥绑定到此脚本。像control + alt + 1|2|3|4|5|6或者如果使用其他东西。点击密钥,让脚本打开该脚本中的所有程序。

  • 如果你想将它们分组,你可以使用像这样的how to shift applications from workspace 1 to 2 using command将它们扔到另一个工作区。

不是你要求的,但似乎我们被认为是寻找变通方法:)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1297.html,未经允许,请勿转载。