Câu trả lời:
Đây là phương pháp cũ hơn: đầu tiên tạm ngưng và sau đó thức dậy để ngủ đông sau khi trì hoãn (15 phút theo mặc định). Sử dụng công cụ này với nhân Linux trước 3.6 hoặc nếu bạn muốn nó không sử dụng bất kỳ nguồn nào sau 15 phút nữa.
Thêm tệp /etc/pm/config.d/00-use-suspend-hybrid
:
# Always use suspend_hybrid instead of suspend
if [ "$METHOD" = "suspend" ]; then
METHOD=suspend_hybrid
fi
# The delay after which hibernation gets triggered (default: 900 seconds, 15 minutes):
PM_HIBERNATE_DELAY=900
Bạn có thể muốn đảm bảo rằng phương thức kết hợp được hỗ trợ trên hệ thống của bạn thông qua mã sau đây. Nếu nó nói "0" thì nó sẽ hoạt động:
sudo pm-is-supported --suspend-hybrid && echo $?
Nếu bạn có nhân Linux 3.6, bạn có thể sử dụng phần sau, phần này sẽ tạm dừng cả đĩa và RAM ngay từ đầu.
Thêm tệp /etc/pm/config.d/00-use-suspend-hybrid
:
# WORKAROUND: always set the default hibernate mode first (normal mode)
# (not required if you have the patch mentioned by Rohan below (http://askubuntu.com/a/344879/169))
HIBERNATE_MODE=platform
# Always use hibernate instead of suspend, but with "suspend to both"
if [ "$METHOD" = "suspend" ]; then
METHOD=hibernate
HIBERNATE_MODE=suspend
fi
# Make sure to use the kernel's method, in case uswsusp is installed etc.
SLEEP_MODULE=kernel
Điều này sẽ luôn ghi hình ảnh vào đĩa và sau đó tạm dừng vào RAM, vì những lợi ích mà việc tiếp tục sẽ luôn nhanh chóng (miễn là pin không hết) và máy sẽ không thức dậy trong một thời gian ngắn (sau PM_HIBERNATE_DELAY) ngủ đông cho thật.
Hạn chế là quá trình này mất nhiều thời gian hơn (vì nó luôn ngủ đông vào đĩa) và pin của bạn có thể hết trong thời gian dài (ví dụ sau 12 giờ).
resume
tranh luận /etc/default/grub.conf
. Cũng như người dùng nvidia tôi phải đặt nomodeset
. Vì vậy, kết quả mục nhập grub trong trường hợp của tôi là : GRUB_CMDLINE_LINUX_DEFAULT="nomodeset resume=UUID=uuidofswappartition"
. Đừng quên grub-update
. Và cũng có một số mô-đun phải được tải xuống để tạo tệp /etc/pm/config.d/00-unload_modules
với dòng SUSPEND_MODULES="ath5k r8169"
và chỉ để đảm bảo tôi cũng đổi tên 00-use- 10-use-suspend-hybrid
Trong Ubuntu 18.04 có một tùy chọn hẹn giờ mới. Trong systemd
có sẵn một chế độ mới suspend-then-hibernate
. Điều này sẽ bắt đầu với chế độ ngủ và sau đó chuyển sang chế độ ngủ đông sau một thời gian cố định.
Trong hybrid-sleep
chế độ, phần ngủ đông chỉ có hiệu lực khi pin yếu và hệ thống tắt.
Để bắt đầu sử dụng chức năng này, bạn cần tạo một tệp /etc/systemd/sleep.conf
có nội dung tiếp theo:
[Sleep]
HibernateDelaySec=3600
Điều này sẽ chuyển từ ngủ sang ngủ đông sau 1 giờ ngủ. Bạn có thể chỉnh sửa HibernateDelaySec
để thay đổi độ trễ thành ngủ đông.
Trước tiên, hãy kiểm tra nếu đình chỉ hoạt động sau đó ngủ đông bằng systemd
Mở một thiết bị đầu cuối bằng cách nhấn Ctrl+ Alt+ Tvà nhập:
sudo systemctl suspend-then-hibernate
Nếu nó hoạt động làm cho nó vĩnh viễn.
Mở tệp /etc/systemd/logind.conf
bằng trình soạn thảo ưa thích của bạn. Bạn sẽ cần phải gọi điện hành chính của bạn bằng cách sudo
, gksudo
hoặc pkexec
để chỉnh sửa tập tin này.
Tìm hai dòng:
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
Lưu ý, những dòng này được nhận xét ra #
trước mặt chúng. Đây suspend
là hành động mặc định. Tháo #
và thay đổi suspend
để suspend-then-hibernate
trong hai dòng sau để họ trông như thế này:
HandleSuspendKey=suspend-then-hibernate
HandleLidSwitch=suspend-then-hibernate
Lưu các tập tin. Đăng xuất và đăng nhập lại hoặc khởi động lại logind
dịch vụ bằng lệnh:
systemctl restart systemd-logind.service
cảnh báo! phiên người dùng của bạn sẽ được khởi động lại
Nguồn: Nắp đóng Tạm dừng sau đó ngủ đông
Các giải pháp của blueyed cho lai Bất đình chỉ với Linux 3.6+ không làm việc cho tôi. Tôi nghi ngờ điều này là do Ubuntu 16.04 sử dụng systemd
và không sử dụng tệp /etc/pm/config.d/00-use-suspend-hybrid
.
Đầu tiên, kiểm tra xem ngủ đông và ngủ lai có hoạt động bằng systemd không
Mở một thiết bị đầu cuối bằng cách nhấn Ctrl+ Alt+ Tvà nhập:
sudo systemctl hibernate
Điều này sẽ khiến máy tính của bạn ngủ đông. Để thử ngủ lai, hãy nhập:
sudo systemctl hybrid-sleep
Nếu nó hoạt động làm cho nó vĩnh viễn.
Mở tệp /etc/systemd/logind.conf
bằng trình soạn thảo ưa thích của bạn. Bạn sẽ cần phải gọi điện hành chính của bạn bằng cách sudo
, gksudo
hoặc pkexec
để chỉnh sửa tập tin này.
Tìm hai dòng:
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
Lưu ý, những dòng này được nhận xét ra #
trước mặt chúng. Đây suspend
là hành động mặc định. Tháo #
và thay đổi suspend
để hybrid-sleep
trong hai dòng sau để họ trông như thế này:
HandleSuspendKey=hybrid-sleep
HandleLidSwitch=hybrid-sleep
Lưu các tập tin. Đăng xuất và đăng nhập lại.
Ghi chú:
suspend
hoặc hybrid-sleep
có một lựa chọn thứ ba , hibernate
.Suspend
từ menu cog sẽ đặt máy tính ở trạng thái tạm dừng bình thường không ngủ lai.Tôi hi vọng cái này giúp được
Trong 12.04, tôi nhận thấy rằng khi chế độ ngủ đông được kích hoạt (sử dụng PM_HIBERNATE_DELAY=XX
), sơ yếu lý lịch / làm tan các tập lệnh shell không bỏ đặt biến hồ sơ grub. Do đó grub không autoboot.
Thời gian chờ được đặt thành -1 và nó đang chờ người dùng lựa chọn. Tôi đoán điều này đòi hỏi một số chỉnh sửa các tập lệnh trong /etc/pm/sleep.d/10_grub-common
. Là một người mới nên tôi không dám tìm ra sự thay đổi chính xác một cách đáng tiếc.
Câu hỏi này xuất hiện đủ thường xuyên trong Google mà tôi nghĩ rằng nó đáng để trả lời. Phương pháp được mô tả ở đây là (imo) không bị đình chỉ lai. Đó là "ngủ đông sau X phút tạm ngưng". Đình chỉ lai thực sự ghi RAM của bạn ra đĩa và sau đó ở trạng thái năng lượng thấp (chế độ ngủ). Mặc dù mất nhiều thời gian hơn nhưng sơ yếu lý lịch là ngay lập tức trong khi máy còn pin, nếu không thì tiếp tục hình thành đĩa cứng. Hành vi này là những gì hầu hết mọi người gọi là ngủ lai và được sử dụng theo mặc định trong các máy tính xách tay Windows và Mac mới hơn.
Đây là cách kích hoạt hệ thống treo thực sự lai:
% cat /etc/pm/config.d/00-use-suspend-hy điều chỉnh # Luôn sử dụng Suspend_hy điều chỉnh thay vì tạm ngưng if ["$ METHOD" = "đình chỉ"]; sau đó PHƯƠNG PHÁP = Suspend_hy điều chỉnh fi
Phương pháp này hiệu quả với tôi trên Sony Vaio SVS của tôi.
PS: Tái tạo bản vá ở đây trong trường hợp tệp bị xóa trong tương lai:
diff --git a / pm / pm-fifts.in b / pm / pm-fifts.in --- a / pm / pm-fiances.in +++ b / pm / pm-fiances.in @@ -316,8 +316,28 @@ nếu [-z "$ HIBERNATE_MODULE"] && \ { [-n "$ {HIBERNATE_MODE}"] && \ grep -qw "$ {HIBERNATE_MODE}" / sys / sức mạnh / đĩa && \ + HIBERNATE_MODE_SAVE = $ (cat / sys / power / đĩa) && \ + HIBERNATE_MODE_SAVE = "$ {HIBERNATE_MODE_SAVE ## * [}" && \ + HIBERNATE_MODE_SAVE = "$ {HIBERNATE_MODE_SAVE %%] *}" && \ echo -n "$ {HIBERNATE_MODE}"> / sys / power / đĩa echo -n "đĩa"> / sys / power / state + RET = $? + echo -n "$ HIBERNATE_MODE_SAVE"> / sys / power / đĩa + trả lại "$ RET" +} + + + # cho các hạt nhân hỗ trợ tạm ngưng cả hai (nghĩa là tạm ngưng lai) + # kể từ kernel 3.6 + nếu [-z "$ SUSPEND_HYBRID_MODULE"] && \ + [-f / sys / power / đĩa] && \ + đĩa grep -q / sys / power / state && \ + grep -q đình chỉ / sys / power / đĩa; sau đó + SUSPEND_HYBRID_MODULE = "nhân" + do_suspend_hy điều chỉnh () + { + HIBERNATE_MODE = "tạm ngưng" + do_hibernate } fi
Nguồn:
Có một giải pháp khác mà không cần thêm bất kỳ tệp nào trong config.d, chỉ cần sử dụng wakealarm trong / sys / class / rtc / rtc0. Sử dụng mã lỗi thời trong các hàm pm (/ usr / lib / pm-utils) sau khi các bình luận #since kernel không hỗ trợ trực tiếp ..., ('cos kernel hiện tại (sau 3.6 một cái gì đó) không hỗ trợ trực tiếp). Hoàn nguyên mã đó và đặt vào phần do_suspend () thay vì do_suspend_hy điều chỉnh () và sử dụng bản vá cho các hàm pm (cho đến khi họ sửa nó).
Mã lỗi thời (tạm dừng sau đó ngủ đông khi Suspend_hy điều chỉnh được gọi):
# since the kernel does not directly support hybrid sleep, we do
# something else -- suspend and schedule an alarm to go into
# hibernate if we have slept long enough.
# Only do this if we do not need to do any special video hackery on resume
# from hibernate, though.
if [ -z "$SUSPEND_HYBRID_MODULE" -a -w "$PM_RTC/wakealarm" ] && \
check_suspend && check_hibernate && ! is_set $HIBERNATE_RESUME_POST_VIDEO; \
then
SUSPEND_HYBRID_MODULE="kernel"
do_suspend_hybrid() {
WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
echo >"$PM_RTC/wakealarm"
echo $WAKETIME > "$PM_RTC/wakealarm"
if do_suspend; then
NOW=$(cat "$PM_RTC/since_epoch")
if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ]; then
log "Woken by RTC alarm, hibernating."
# if hibernate fails for any reason, go back to suspend.
do_hibernate || do_suspend
else
echo > "$PM_RTC/wakealarm"
fi
else
# if we cannot suspend, just try to hibernate.
do_hibernate
fi
}
fi
Đề nghị. Thậm chí dễ dàng hơn để sử dụng uswsusp trong khi đồng thời tối đa hóa lợi ích của s2both tức là s2both khi tạm ngưng. Đặt mã được hoàn nguyên trong một phần do_suspend () của mô đun uswsusp (/usr/lib/pm-utils/module.d).
Mã được hoàn nguyên (Suspend_hy điều chỉnh khi tạm ngừng được gọi):
WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
echo >"$PM_RTC/wakealarm"
echo $WAKETIME > "$PM_RTC/wakealarm"
if do_suspend_hybrid; then
NOW=$(cat "$PM_RTC/since_epoch")
if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ]; then
log "Woken by RTC alarm, hibernating."
# if hibernate fails for any reason, go back to suspend_hybrid.
do_hibernate || do_suspend_hybrid
else
echo > "$PM_RTC/wakealarm"
fi
else
# when do_suspend is being called, convert to suspend_hybrid.
do_suspend_hybrid
fi
Với uswsusp, chúng ta có thể thấy tiến trình đình chỉ / ngủ đông và quá trình ngược được hiển thị trong văn bản, thậm chí chúng ta có thể hủy bỏ nó bằng cách nhấn backspace. Không có uswsusp, đình chỉ / ngủ đông chỉ xuất hiện biến mất một cách khó chịu, đặc biệt là khi wakealarm được kích hoạt và thực thi hibernate (s2disk trong uswsusp). Đặt thời gian ngủ trước khi ngủ đông ở vị trí thông thường trên tệp chức năng pm.
# variables to handle hibernate after suspend support
PM_HIBERNATE_DELAY=900 # 15 minutes
PM_RTC=/sys/class/rtc/rtc0
Đây là mod uswsusp: (hãy nhớ rằng mô-đun này được gọi từ các hàm pm nên các biến được chèn là như nhau)
#!/bin/sh
# disable processing of 90chvt and 99video.
# s2ram and s2disk handle all this stuff internally.
uswsusp_hooks()
{
disablehook 99video "disabled by uswsusp"
}
# Since we disabled 99video, we need to take responsibility for proper
# quirk handling. s2ram handles all common video quirks internally,
# so all we have to do is translate the HAL standard options to s2ram options.
uswsusp_get_quirks()
{
OPTS=""
ACPI_SLEEP=0
for opt in $PM_CMDLINE; do
case "${opt##--quirk-}" in # just quirks, please
dpms-on) ;; # no-op
dpms-suspend) ;; # no-op
radeon-off) OPTS="$OPTS --radeontool" ;;
reset-brightness) ;; # no-op
s3-bios) ACPI_SLEEP=$(($ACPI_SLEEP + 1)) ;;
s3-mode) ACPI_SLEEP=$(($ACPI_SLEEP + 2)) ;;
vbe-post) OPTS="$OPTS --vbe_post" ;;
vbemode-restore) OPTS="$OPTS --vbe_mode" ;;
vbestate-restore) OPTS="$OPTS --vbe_save" ;;
vga-mode-3) ;; # no-op
save-pci) OPTS="$OPTS --pci_save" ;;
none) QUIRK_NONE="true" ;;
*) continue ;;
esac
done
[ $ACPI_SLEEP -ne 0 ] && OPTS="$OPTS --acpi_sleep $ACPI_SLEEP"
# if we were told to ignore quirks, do so.
# This is arguably not the best way to do things, but...
[ "$QUIRK_NONE" = "true" ] && OPTS=""
}
# Since we disabled 99video, we also need to handle displaying
# help info for the quirks we handle.
uswsusp_help()
{
echo # first echo makes it look nicer.
echo "s2ram video quirk handler options:"
echo
echo " --quirk-radeon-off"
echo " --quirk-s3-bios"
echo " --quirk-s3-mode"
echo " --quirk-vbe-post"
echo " --quirk-vbemode-restore"
echo " --quirk-vbestate-restore"
echo " --quirk-save-pci"
echo " --quirk-none"
}
# This idiom is used for all sleep methods. Only declare the actual
# do_ method if:
# 1: some other sleep module has not already done so, and
# 2: this sleep method can actually work on this system.
#
# For suspend, if SUSPEND_MODULE is set then something else has already
# implemented do_suspend. We could just check to see of do_suspend was
# already declared using command_exists, but using a dedicated environment
# variable makes it easier to debug when we have to know what sleep module
# ended up claiming ownership of a given sleep method.
if [ -z "$SUSPEND_MODULE" ] && command_exists s2ram && \
( grep -q mem /sys/power/state || \
( [ -c /dev/pmu ] && check_suspend_pmu; ); ); then
SUSPEND_MODULE="uswsusp"
do_suspend()
{
WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
echo >"$PM_RTC/wakealarm"
echo $WAKETIME > "$PM_RTC/wakealarm"
if do_suspend_hybrid; then
NOW=$(cat "$PM_RTC/since_epoch")
if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ]; then
log "Woken by RTC alarm, hibernating."
# if hibernate fails for any reason, go back to suspend_hybrid.
do_hibernate || do_suspend_hybrid
else
echo > "$PM_RTC/wakealarm"
fi
else
# when do_suspend is being called, convert to suspend_hybrid.
do_suspend_hybrid
fi
}
fi
if [ -z "$HIBERNATE_MODULE" ] && \
[ -f /sys/power/disk ] && \
grep -q disk /sys/power/state && \
[ -c /dev/snapshot ] &&
command_exists s2disk; then
HIBERNATE_MODULE="uswsusp"
do_hibernate()
{
s2disk
}
fi
if [ -z "$SUSPEND_HYBRID_MODULE" ] &&
grep -q mem /sys/power/state && \
command_exists s2both && \
check_hibernate; then
SUSPEND_HYBRID_MODULE="uswsusp"
do_suspend_hybrid()
{
uswsusp_get_quirks
s2both --force $OPTS
}
if [ "$METHOD" = "suspend_hybrid" ]; then
add_before_hooks uswsusp_hooks
add_module_help uswsusp_help
fi
fi
Câu trả lời của user68186 cho Ubuntu 16.04 không hoạt động với tôi. Tuy nhiên, giải pháp ở đây đã làm.
Đầu tiên, đảm bảo ngủ đông hoạt động. Sau đó
Tìm kiếm và cài đặt trình soạn thảo dconf trong Phần mềm Ubuntu. Sau đó khởi chạy nó và điều hướng đến org -> gnome -> cài đặt daemon -> plugin -> power.
Thay đổi giá trị của nắp nắp-đóng-hành động-hành động và nắp-pin-hành động-nắp-pin.
Trong cài đặt sức mạnh của tôi, các tùy chọn này hiển thị dưới dạng trống, nhưng chúng hoạt động như dự định.
Trong Ubuntu 18.04, nó dễ dàng hơn nhiều. Trong systemd có sẵn một chế độ mới đình chỉ-sau đó ngủ đông . Để bắt đầu sử dụng chức năng này, bạn cần tạo một tập tin /etc/systemd/s ngủ.conf với nội dung tiếp theo:
[Sleep]
HibernateDelaySec=3600
Sau đó, bạn có thể kiểm tra nó bằng lệnh:
sudo systemctl suspend-then-hibernate
(bạn có thể chỉnh sửa HibernateDelaySec để giảm độ trễ thành ngủ đông). Nếu tất cả đều hoạt động tốt, bạn có thể thay đổi Hành động Đóng nắp, để thực hiện, bạn cần chỉnh sửa tệp /etc/systemd/logind.conf
Bạn cần tìm tùy chọn Xử lýLidSwitch = , bỏ ghi chú và thay đổi thành Xử lýLidSwitch = đình chỉ-sau đó ngủ đông . Sau đó, bạn cần khởi động lại dịch vụ logind (wirning! Phiên người dùng của bạn sẽ được khởi động lại) bằng lệnh tiếp theo:
systemctl restart systemd-logind.service
Đó là tất cả! Bây giờ bạn có thể sử dụng chức năng tốt đẹp này.