Tự động ngủ và thức dậy vào những thời điểm cụ thể


59

Làm cách nào tôi có thể ngủ đông hoặc ngủ máy tính để bàn Ubuntu 10.10 của mình và để nó "thức dậy" vào ngày hôm sau?

Tôi đã thấy phần mềm có thể làm điều này trên windows, vì vậy nó không thể khó với Ubuntu!

Câu trả lời:


74

rtcwake

Lệnh mà bạn quan tâm là rtcwake:

Chương trình này được sử dụng để vào trạng thái ngủ hệ thống cho đến khi thời gian thức dậy được chỉ định.

thử nghiệm

Để tìm đúng cú pháp phù hợp với bạn, hãy thử như sau:

sudo rtcwake -u -s 60 -m mem

Điều này sẽ đình chỉ máy tính trong 60 giây trước khi khôi phục. Tham số quan trọng là mem Bạn có một số tùy chọn bạn có thể chọn - chơi để tìm giá trị phù hợp nhất với bạn:

          standby
                 ACPI state S1. This state offers  minimal,  though  real,
                 power savings, while providing a very low-latency transi‐
                 tion back to a working system. This is the default mode.

          mem    ACPI state S3 (Suspend-to-RAM). This state offers signif‐
                 icant  power  savings  as everything in the system is put
                 into a low-power  state,  except  for  memory,  which  is
                 placed in self-refresh mode to retain its contents.

          disk   ACPI  state  S4  (Suspend-to-disk). This state offers the
                 greatest power savings, and  can  be  used  even  in  the
                 absence  of  low-level platform support for power manage‐
                 ment. This state operates  similarly  to  Suspend-to-RAM,
                 but  includes  a final step of writing memory contents to
                 disk.

          off    ACPI  state  S5  (Poweroff).  This  is  done  by  calling
                 '/sbin/shutdown'.   Not officially supported by ACPI, but
                 usually working.

          no     Don't suspend. The rtcwake command sets RTC  wakeup  time
                 only.

          on     Don't  suspend,  but  read  RTC  device  until alarm time
                 appears. This mode is useful for debugging.

đình chỉ cho đến một thời điểm được biết đến

Một tập lệnh (ở dưới cùng của bài đăng này) có thể được sử dụng để tạm dừng máy tính của bạn và đánh thức vào một thời điểm cụ thể:

cú pháp là suspend_until [hh:mm]ví dụ

sudo ./suspend_until 07:30

Lưu tập lệnh như tên suspend_untilvà cung cấp cho nó quyền thực thi, tức là

chmod +x suspend_until

Cron

Bạn có thể tạo một công việc cron gốc gọi kịch bản này để thực thi vào một thời điểm cụ thể vào buổi tối và sau đó thức dậy vào buổi sáng:

sudo crontab -e

Bây giờ hãy nhập nội dung nào đó để chạy tập lệnh tạm dừng lúc 23:30:

30 23 * * * /home/myhomefolder/suspend_until 07:30

kịch bản đình chỉ

#!/bin/bash

# Auto suspend and wake-up script
#
# Puts the computer on standby and automatically wakes it up at specified time
#
# Written by Romke van der Meulen <redge.online@gmail.com>
# Minor mods fossfreedom for AskUbuntu
#
# Takes a 24hour time HH:MM as its argument
# Example:
# suspend_until 9:30
# suspend_until 18:45

# ------------------------------------------------------
# Argument check
if [ $# -lt 1 ]; then
    echo "Usage: suspend_until HH:MM"
    exit
fi

# Check whether specified time today or tomorrow
DESIRED=$((`date +%s -d "$1"`))
NOW=$((`date +%s`))
if [ $DESIRED -lt $NOW ]; then
    DESIRED=$((`date +%s -d "$1"` + 24*60*60))
fi

# Kill rtcwake if already running
sudo killall rtcwake

# Set RTC wakeup time
# N.B. change "mem" for the suspend option
# find this by "man rtcwake"
sudo rtcwake -l -m mem -t $DESIRED &

# feedback
echo "Suspending..."

# give rtcwake some time to make its stuff
sleep 2

# then suspend
# N.B. dont usually require this bit
#sudo pm-suspend

# Any commands you want to launch after wakeup can be placed here
# Remember: sudo may have expired by now

# Wake up with monitor enabled N.B. change "on" for "off" if 
# you want the monitor to be disabled on wake
xset dpms force on

# and a fresh console
clear
echo "Good morning!"

Lưu ý

Thay đổi memtrong phần này của tập lệnh cho bất kỳ phương thức tạm ngưng nào phù hợp với bạn:

# Set RTC wakeup time
sudo rtcwake -l -m mem -t $DESIRED &

Bạn cũng có thể phải thay thế -ucờ thay cho -lcờ tùy thuộc vào việc đồng hồ phần cứng của bạn sử dụng thời gian UTC ( -u) hay cục bộ ( -l). Lưu ý rằng đồng hồ phần cứng của bạn khác với đồng hồ hệ thống bạn thấy trong hệ điều hành.

tín dụng để tái phân phối


1
những gì tôi yêu cầu ... và nhiều hơn nữa! Cảm ơn bạn đã đọc ở giữa dòng!
drnessie

3
cảm ơn - chỉ cần cập nhật một chút để làm nổi bật bit nào của tập lệnh mà bạn cần thay đổi cho bất kỳ phương thức tạm dừng nào phù hợp với bạn.
fossfreedom

5
Killall là không cần thiết, rtcwake không chạy như một daemon, nó chỉ đơn giản viết một giá trị cho / sys / class / rtc / rtc0 / wakealarm; chạy lại nó sẽ ghi một giá trị khác vào tập tin đó. Ngoài ra, loại bỏ & ở cuối rtcwake, nó sẽ thoát khi hoàn thành. Sau đó, bạn có thể loại bỏ lệnh ngủ. Và, nếu bạn muốn chạy các lệnh gốc khác trong tập lệnh, tại sao không chạy toàn bộ sudo thay vì các lệnh riêng lẻ ở đó?
unhammer

# máy tính xách tay cũ của tôi sẽ không thức dậy bằng cách sử dụng tập lệnh ở trên. vì vậy đây là những gì tôi đã làm # root crontab 30 20 * * * /home/gare/Document/scripts/suspend_10_hours.sh >> /home/gare/Document/scripts/suspend.log ~ $ more / home / gare / Documents scripts / Suspend_10_hours.sh #! / bin / bash # laptop cũ sẽ không đánh thức; vì vậy hãy nói với rtcwake tạm ngưng trong 10 giờ # 10 giờ * 60 phút * 60 giây = 36000 sudo rtcwake -u -s 36000 -m mem
gare

1
Ngoài những gì @unhammer nói, killall không chỉ không cần thiết mà còn thực sự có hại vì nó sẽ gửi SIGTERM đến tất cả các quy trình trên hệ thống của bạn khớp với "killall". Vui lòng kết hợp các bản sửa lỗi được đề xuất bởi unhammer thay vì dẫn đến những người sao chép thực hành sai.
josch

5

Sử dụng rtcwake tôi đã tạo ra một tập lệnh bash đơn giản. Nó sử dụng php để dịch ngôn ngữ tự nhiên vào thời gian hệ thống. Ví dụ:

  • sudo ./cu "tomorrow 9am"

  • sudo ./cu "next monday 3pm"

  • sudo ./cu "1 hour ago"

    rtcwake: time doesn't go backward

Bạn có thể tải nó ở đây.

#!/bin/bash
export sdate=$1

date=`/usr/bin/php << 'EOF'
<?php
date_default_timezone_set("Etc/GMT-2");
$date = strtotime(GETENV("sdate"));
echo "\r".$date;
EOF`

rtcwake -m mem -t $date

4
Lưu ý rằng ngày -d đã hiểu một số chuỗi như vậy: cyberciti.biz/tips/
Kẻ

0

rtcwakekhông có tác dụng với máy của tôi. Trên bo mạch chủ Asus của tôi, tôi phải đặt thời gian đánh thức trong bios. Tôi đã tìm thấy cài đặt trong menu Advanced> APM và tôi đã phải sử dụng UTC mặc dù thời gian bios của tôi được đặt thành giờ miền Đông Hoa Kỳ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.