답변:
이 방법은 이전 방법입니다. 먼저 일시 중단 한 후 대기 모드 (최대 15 분) 후에 최대 절전 모드로 전환합니다. 3.6 이전의 Linux 커널에서 이것을 사용하거나, 원하는 경우 15 분 후에는 더 이상 전원을 사용하지 않습니다.
파일을 추가하십시오 /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
다음 코드를 통해 하이브리드 방법이 시스템에서 지원되는지 확인하십시오. "0"이라고 표시되면 작동해야합니다.
sudo pm-is-supported --suspend-hybrid && echo $?
Linux 3.6 커널이있는 경우 다음을 사용할 수 있으며 처음부터 디스크와 RAM이 일시 중단됩니다.
파일을 추가하십시오 /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
이렇게하면 이미지가 항상 디스크에 기록 된 다음 RAM이 일시 중지되어 배터리가 부족하지 않는 한 재개가 항상 빠르며 짧은 시간 동안 (PM_HIBERNATE_DELAY 이후) 머신이 깨어나지 않는 이점이 있습니다. 진짜로 동면합니다.
단점은 프로세스가 더 오래 걸리고 (항상 디스크로 최대 절전 모드에 있기 때문에) 배터리가 장기적으로 (12 시간 후에) 소모 될 수 있다는 것입니다.
resume
인수였습니다 /etc/default/grub.conf
. 또한 nvidia 사용자로 설정해야했습니다 nomodeset
. 따라서 필자의 경우 grub 항목은 다음과 같습니다 GRUB_CMDLINE_LINUX_DEFAULT="nomodeset resume=UUID=uuidofswappartition"
. 잊지 마세요 grub-update
. 또한 일부 모듈은 너무 언로드 파일을 생성하는 /etc/pm/config.d/00-unload_modules
라인 SUSPEND_MODULES="ath5k r8169"
그냥 확실히 나는 또한 00-사용이 일시 중지 하이브리드에 이름을 바꿀 수 있도록10-use-suspend-hybrid
에서 우분투 18.04 가 새로운 시간 제한 옵션이 있습니다. 에서이 systemd
새로운 모드 availiable이다 suspend-then-hibernate
. 절전 모드로 시작한 다음 고정 된 시간이 지나면 최대 절전 모드로 전환됩니다.
에서 hybrid-sleep
배터리가 시스템 닫힌다 아래로 매우 낮고 경우에만 모드, 최대 절전 모드 부분은 효과적인 가져옵니다.
이 기능을 사용하려면 /etc/systemd/sleep.conf
다음 내용 으로 파일을 작성해야 합니다.
[Sleep]
HibernateDelaySec=3600
이것은 1 시간의 수면 후 절전 모드에서 최대 절전 모드로 전환됩니다. HibernateDelaySec
지연을 최대 절전 모드로 변경하도록 편집 할 수 있습니다 .
먼저 systemd를 사용하여 일시 중단 후 최대 절전 모드가 작동하는지 테스트하십시오.
Ctrl+ Alt+ 를 눌러 터미널을 열고 다음을 T입력하십시오.
sudo systemctl suspend-then-hibernate
작동하면 영구적으로 만듭니다.
/etc/systemd/logind.conf
원하는 편집기를 사용하여 파일 을여십시오. 다음과 같은 방법으로 당신의 관리 능력을 호출해야합니다 sudo
, gksudo
또는 pkexec
이 파일을 편집 할 수 있습니다.
두 줄을 찾으십시오.
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
이 줄은 #
그 앞에 주석 처리되어 있습니다. 은 suspend
기본 동작입니다. 다음 두 줄 을 제거하고 다음 #
과 같이 변경 하십시오.suspend
suspend-then-hibernate
HandleSuspendKey=suspend-then-hibernate
HandleLidSwitch=suspend-then-hibernate
파일을 저장하십시오. logind
다음 명령으로 로그 아웃했다가 다시 로그인하거나 서비스를 다시 시작 하십시오.
systemctl restart systemd-logind.service
경고! 사용자 세션이 다시 시작됩니다
솔루션 에 의해 blueyed 리눅스 3.6 이상으로 일시 중단 리얼 하이브리드에 대한이 나를 위해 작동하지 않았다. 나는 이것이 Ubuntu 16.04가 systemd
파일을 사용하고 사용하지 않기 때문이라고 생각 합니다 /etc/pm/config.d/00-use-suspend-hybrid
.
먼저 systemd를 사용하여 최대 절전 모드 및 하이브리드 절전 모드가 작동하는지 테스트하십시오.
Ctrl+ Alt+ 를 눌러 터미널을 열고 다음을 T입력하십시오.
sudo systemctl hibernate
컴퓨터가 최대 절전 모드로 전환됩니다. 하이브리드 절전 모드를 시도하려면 다음을 입력하십시오.
sudo systemctl hybrid-sleep
작동하면 영구적으로 만듭니다.
/etc/systemd/logind.conf
원하는 편집기를 사용하여 파일 을여십시오. 다음과 같은 방법으로 당신의 관리 능력을 호출해야합니다 sudo
, gksudo
또는 pkexec
이 파일을 편집 할 수 있습니다.
두 줄을 찾으십시오.
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
이 줄은 #
그 앞에 주석 처리되어 있습니다. 은 suspend
기본 동작입니다. 다음 두 줄 을 제거하고 다음 #
과 같이 변경 하십시오.suspend
hybrid-sleep
HandleSuspendKey=hybrid-sleep
HandleLidSwitch=hybrid-sleep
파일을 저장하십시오. 로그 아웃했다가 다시 로그인하십시오.
노트 :
suspend
또는 hybrid-sleep
세 번째 옵션이 있습니다, hibernate
.Suspend
톱니 바퀴 메뉴에서를 클릭하면 컴퓨터가 하이브리드 절전 모드가 아닌 일반 일시 중단 상태가됩니다.이게 도움이 되길 바란다
12.04에서 나는 최대 절전 모드가 트리거 될 때 (을 사용하여 PM_HIBERNATE_DELAY=XX
) 쉘 스크립트 재개 / 해동이 grub recordfail 변수를 설정 해제하지 않는다는 것을 알았습니다. 따라서 grub은 자동 부팅되지 않습니다.
제한 시간이 -1로 설정되고 사용자 선택을 기다립니다. 나는 이것이에서 스크립트를 편집해야한다고 생각합니다 /etc/pm/sleep.d/10_grub-common
. 초보자이기 때문에 불행히도 정확한 변화를 파악하려고 애 쓰지 않았습니다.
이 질문은 Google에서 자주 제기되어 가치가 있다고 생각합니다. 여기에 설명 된 방법은 하이브리드 일시 중단이 아닌 (imo) 입니다. 「정지 중 × 분 후 최대 절전 모드」입니다. True 하이브리드 일시 중단은 RAM을 디스크에 기록한 다음 저전력 상태 (절전 모드)로 전환합니다. 시간이 더 걸리는 반면 기기에 배터리가 남아있는 동안 재개는 즉시 이루어지며 그렇지 않으면 하드 디스크에서 재개됩니다. 이 동작은 대부분의 사람들이 하이브리드 절전 모드로 알고 있으며 기본적으로 최신 Windows 및 Mac 랩톱에서 사용됩니다.
실제 하이브리드 일시 중단 을 활성화하는 방법은 다음과 같습니다 .
% cat /etc/pm/config.d/00-use-suspend-hybrid # 항상 suspend 대신 suspend_hybrid를 사용하십시오 [ "$ METHOD"= "일시 중단"] 인 경우; 그때 방법 = suspend_hybrid fi
이 방법은 Sony Vaio SVS에서 작동합니다.
추신 : 향후 파일이 삭제 될 경우를 대비하여 패치를 재현합니다.
diff --git a / pm / pm-functions.in b / pm / pm-functions.in --- a / pm / pm-functions.in +++ b / pm / pm-functions.in @@ -316,8 +316,28 @@ if [-z "$ HIBERNATE_MODULE"] && \ { [-n "$ {HIBERNATE_MODE}"] && \ grep -qw "$ {HIBERNATE_MODE}"/ sys / power / disk && \ + HIBERNATE_MODE_SAVE = $ (cat / sys / power / disk) && \ + HIBERNATE_MODE_SAVE = "$ {HIBERNATE_MODE_SAVE ## * [}"&& \ + HIBERNATE_MODE_SAVE = "$ {HIBERNATE_MODE_SAVE %%] *}"&& \ echo -n "$ {HIBERNATE_MODE}"> / sys / power / disk echo -n "디스크"> / sys / power / state + RET = $? + echo -n "$ HIBERNATE_MODE_SAVE"> / sys / power / disk + "$ RET"반환 +} + fi + 둘 다 일시 중단을 지원하는 커널의 경우 + # (예 : 하이브리드 일시 중단) 커널 3.6 이후 + # + 경우 [-z "$ SUSPEND_HYBRID_MODULE"] && \ + [-f / sys / power / disk] && \ + grep -q 디스크 / sys / power / state && \ + grep -q는 / sys / power / disk를 일시 중단합니다. 그때 + SUSPEND_HYBRID_MODULE = "커널" + do_suspend_hybrid () + { + HIBERNATE_MODE = "일시 중지" + do_hibernate } fi
출처 :
config.d에 파일을 추가하지 않고 / sys / class / rtc / rtc0에서 wakealarm을 사용하는 다른 솔루션이 있습니다. 커널이 직접 지원하지 않기 때문에 # pm-functions (/ usr / lib / pm-utils)에서 쓸모없는 코드를 사용하십시오. 해당 코드를 되돌리고 do_suspend_hybrid () 대신 do_suspend () 부분에 넣고 pm-functions에 대한 패치를 사용하십시오 (해결 될 때까지).
사용되지 않는 코드 (suspend_hybrid가 호출 될 때 일시 중단 된 후 최대 절전 모드) :
# 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
추천합니다. uswsusp를 사용하는 것이 훨씬 쉬우면서 동시에 일시 중단시 s2both의 이점을 최대화합니다. 되 돌린 코드를 uswsusp 모듈 (/usr/lib/pm-utils/module.d)의 do_suspend () 부분에 넣습니다.
복귀 된 코드 (suspend가 호출 될 때 suspend_hybrid) :
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
uswsusp를 사용하면 suspend / hibernate의 진행 상황과 텍스트로 표시된 역 과정을 볼 수 있습니다. 심지어 백 스페이스를 눌러 중단 할 수도 있습니다. uswsusp가 없으면, 특히 wakealarm이 트리거되고 최대 절전 모드 (uswsusp의 s2disk)가 실행되는 경우 일시 중지 / 최대 절전 모드가 성가신 것처럼 사라집니다. pm-functions 파일의 일반적인 위치에서 최대 절전 모드를 시작하기 전에 절전 모드를 설정하십시오.
# variables to handle hibernate after suspend support
PM_HIBERNATE_DELAY=900 # 15 minutes
PM_RTC=/sys/class/rtc/rtc0
다음은 uswsusp mod입니다. (이 모듈은 pm-functions에서 호출되므로 삽입 된 변수는 동일합니다)
#!/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
Ubuntu 16.04에 대한 user68186의 답변이 효과가 없었습니다. 그러나 여기 에 해결책이 있습니다 .
먼저 최대 절전 모드가 작동하는지 확인하십시오. 그때
Ubuntu Software에서 dconf Editor를 검색하여 설치하십시오. 그런 다음 그것을 시작하고 org-> gnome-> settings daemon-> plugins-> power로 이동하십시오.
"lid-close-ac-action"및 "lid-close-battery-action"값을 변경하십시오.
전원 설정에서이 옵션은 공백으로 표시되지만 의도 한대로 작동합니다.
에서 우분투 18.04 훨씬 더 easer. 에서 systemd 새로운 모드가 availiable이다 일시 중지 후 - 최대 절전 모드 . 이 기능을 사용하려면 다음 내용으로 /etc/systemd/sleep.conf 파일을 만들어야합니다 .
[Sleep]
HibernateDelaySec=3600
그런 다음 명령으로 테스트 할 수 있습니다.
sudo systemctl suspend-then-hibernate
(최대 절전으로의 지연을 줄이기 위해 HibernateDelaySec을 편집 할 수 있습니다). 모든 것이 제대로 작동하면 덮개 닫기 조치를 변경할 수 있습니다.이를 수행하려면 /etc/systemd/logind.conf 파일을 편집해야 합니다.
HandleLidSwitch = 옵션을 찾아 주석 처리를 제거하고 HandleLidSwitch = suspend-then-hibernate로 변경해야 합니다 . 그런 다음 다음 명령으로 로그인 서비스를 다시 시작해야합니다 (wirning! 사용자 세션이 다시 시작됨).
systemctl restart systemd-logind.service
그게 다야! 이제이 멋진 기능을 사용할 수 있습니다.