Apakah mungkin untuk membuat Ubuntu masuk ke kondisi Hibernate dari Suspend, alias "Suspend Sedation"?
Yang saya cari adalah ini:
Ketika saya menutup tutupnya, laptop dimasukkan ke Suspend. Kemudian, setelah waktu yang ditentukan sebelumnya (bahkan jika baterai menjadi kuat) jika saya masih tidak menggunakannya, itu harus menempatkan dirinya ke dalam Hibernate untuk menghemat daya baterai.
Sebagai contoh, laptop saya diatur untuk masuk ke Penangguhan setelah saya menutup tutupnya. Jika kemudian saya tidak menggunakannya sepanjang hari, baterainya habis, karena meskipun dalam mode tunda perangkat keras masih mengkonsumsi sejumlah kecil daya, dan baterainya akhirnya habis. Yang saya inginkan adalah dapat memberi tahu Ubuntu bahwa meskipun ditangguhkan, masih perlu masuk ke Hibernate setelah beberapa jam tidak aktif.
Windows dapat melakukannya. Ubuntu dapat diprogram untuk masuk ke mode Siaga atau Hibernate pada waktu, tetapi tidak keduanya.
sumber
Jawaban:
Di Ubuntu 18.04 itu jauh lebih mudah. Dalam systemd tersedia mode baru suspend-then-hibernate . Untuk mulai menggunakan fungsi ini, Anda perlu membuat file /etc/systemd/sleep.conf dengan konten berikutnya:
Kemudian Anda dapat mengujinya dengan perintah:
Anda dapat mengedit
HibernateDelaySec
untuk mengurangi penundaan untuk hibernasi.Jika semua berfungsi dengan baik Anda dapat mengubah Tutup Tutup Tindakan, untuk melakukannya Anda perlu mengedit file /etc/systemd/logind.conf
Anda perlu menemukan opsi
HandleLidSwitch=
, batalkan komentar dan ubah keHandleLidSwitch=suspend-then-hibernate
. Maka Anda perlu me-restart layanan systemd-logind (peringatan! Sesi pengguna Anda akan di-restart) dengan perintah berikut:Itu saja! Sekarang Anda dapat menggunakan fungsi yang bagus ini.
sumber
Solusi untuk ini sederhana. Pertama, setelah menangguhkan dan melanjutkan, program pm-menangguhkan mengeksekusi serangkaian skrip di
/etc/pm/sleep.d
dan/usr/lib/pm-utils/sleep.d
. Jadi solusi saya adalah menambahkan skrip yang melakukan hal berikut:Berikut adalah skrip yang melakukan ini. Beri nama
0000rtchibernate
dan letakkan di/etc/pm/sleep.d
direktori (0000 itu penting, sehingga skrip dijalankan pertama kali di tunda, dan terakhir pada resume).Semoga kode ini muncul di papan pesan ini (ini adalah posting pertama saya di sini).
Edit nilai batas waktu
autohibernate=7200
di atas, namun Anda harus tidur selama beberapa detik sebelum hibernasi. Nilai saat ini di atas adalah 2 jam. Perhatikan, bahwa laptop Anda AKAN bangun pada saat itu selama beberapa detik, ketika sedang menjalankan fungsi hibernasi.Jadi jika Anda berencana untuk meletakkan laptop Anda di dalam case, jangan menangguhkan, tetapi hibernasi sebagai gantinya. Kalau tidak, laptop Anda bisa terlalu panas di esp. jika dalam kasus slip pas yang ketat (meskipun hanya akan hidup selama beberapa detik hingga satu menit).
Saya telah menggunakan metode ini selama beberapa hari terakhir, sejauh ini telah berhasil (dan menyelamatkan saya dari baterai mati sore ini). Nikmati.
Untuk distribusi Linux lainnya yang digunakan
systemd
dan versi Ubuntu yang lebih baru ini harus tetap bekerja jika Anda menempatkan script di/usr/lib/systemd/system-sleep
bukannya/etc/pm/sleep.d
. Juga, ganti/usr/sbin/pm-hibernate
perintah dengansystemctl hibernate
.sumber
Untuk menjelaskan bagaimana ini bekerja (ini mirip dengan Windows) dengan kata-kata sederhana: mesin tidak bangun dari standby ketika baterai hampir habis untuk dapat menyimpan status mesin ke partisi swap, ia segera menyimpan semuanya ke partisi swap pada siaga, dan ketika baterai habis, itu akan pulih dari itu dengan memuat negara dari partisi swap (seperti yang akan dilakukan jika Anda hibernasi).
AFAIK linux akan / harus menggunakan hybrid standby / hibernate alih-alih standby "normal" jika ia tahu itu berfungsi untuk perangkat keras Anda. Mungkin juga ini dinonaktifkan saat ini karena terlalu banyak bug atau sesuatu ...;)
Jika Anda suka bereksperimen, mungkin Anda bisa melihat apakah Anda bisa mendapatkan hasil yang baik dengan pm-suspend-hybrid .
Jika yang berikut mengatakan Anda beruntung, maka secara teori penangguhan hibrida didukung di sistem Anda:
sumber
Anda mungkin tertarik dengan s2both . Ini disediakan oleh paket
uswsusp
di Ubuntu 10.10. Ini disk ke disk, tetapi bukannya mematikan sistem, malah meletakkannya di S3, yang merupakan mode daya yang biasanya terkait dengan opsi "Tangguhkan" di Ubuntu. pm-suspend-hybrid adalah alat lain yang dimaksudkan untuk melakukan hal yang sama.Untuk menjadikan ini otomatis pada tutup tutup, lihat panduan berikut yang memungkinkan Anda untuk menjalankan skrip sewenang-wenang ketika acara tutup ditangkap:
http://ubuntuforums.org/showthread.php?t=1076486
Jika Anda memiliki ThinkPad, halaman manual untuk
tpctl
membuat referensi ke argumen--pm-sedation-hibernate-from-suspend-timer
,, yang tampaknya menyediakan fitur yang Anda cari. Saya akan memperingatkan Anda agar tidak mencoba ini pada perangkat keras non-ThinkPad.Sebagai referensi, saya melihat halaman manual untuk hibernate.conf ; tampaknya tidak memiliki opsi yang relevan tetapi mungkin layak dibaca kedua.
sumber
Ubuntu 16.04 - dari suspend / sleep menjadi hibernate setelah waktu yang ditentukan sebelumnya
Tampaknya pada Ubuntu 16.04 hal-hal sedikit berbeda, jadi langkah yang saya ambil untuk membuatnya bekerja adalah:
Pastikan hibernate berfungsi seperti yang diharapkan saat berjalan
Salin
suspend.target
file asli :Kemudian edit file
/etc/systemd/system/suspend.target
dan tambahkan baris:ke
[Unit]
bagian file itu.Buat file
/etc/systemd/system/delayed-hibernation.service
dengan konten berikut:/etc/delayed-hibernation.conf
untuk skrip dengan konten berikut:Buat skrip yang benar-benar akan melakukan kerja keras.
Buat file
/usr/local/bin/delayed-hibernation.sh
dengan konten:Butuh cukup banyak sampai saya menulis skrip ini berdasarkan balasan lain di utas ini, hal-hal yang saya temukan di internet seperti https://bbs.archlinux.org/viewtopic.php?pid=1554259
Versi skrip saya mencoba menangani banyak masalah seperti masuk ke suspend lagi jika hibernate tidak berhasil tetapi jangan bangun lagi setelah waktu yang ditentukan sebelumnya berulang-ulang.
Langkah terakhir saya anggap hanya menjalankan
untuk memastikan layanan / konfigurasi baru digunakan.
Untuk memeriksa log layanan, Anda dapat menggunakan:
atau untuk log lengkap penggunaan layanan:
Log normal yang saya dapatkan dari layanan yang berjalan adalah:
Jadi ini dia, saya harap ini sangat membantu seseorang karena saya menghabiskan waktu berhari-hari untuk mencari kombinasi yang tepat dari konfigurasi dan versi skrip untuk membuat fitur praktis ini berfungsi.
sumber
/bin/systemctl hibernate
akan selalu mengembalikan 1 ketika berjalan di skrip systemd, meskipun berfungsi dengan baik pada baris perintah.Kalau-kalau ada yang tidak beres selama
pm-hibernate
saya lebih suka meletakkan komputer untuk menunda daripada membiarkannya berjalan. Jadi Anda bisa menggunakan:sumber
Berikut adalah versi terbaru dari jawaban Derek Pressnall yang bekerja dengan systemd dan memasukkan saran Eliah Kagan , cukup taruh di /usr/lib/systemd/system-sleep/delayed_hibernation.sh dan buat itu bisa dieksekusi:
sumber
Ini resep saya (mengujinya pada dua notebook Ubuntu 16.04):
Letakkan skrip ini di mana pun Anda suka (saya taruh di root,
/syspend.sh
) dan buat itu bisa dieksekusi (chmod +x /suspend.sh
)Kemudian membuat sasaran systemd:
# touch /etc/systemd/system/suspend-to-sleep.target
Paste konten ini:Kemudian aktifkan
# systemctl enable suspend-to-sleep.target
.Saya telah menghadapi masalah pada salah satu notebook: penutup tutup tidak memicu target ini. Ini disebabkan oleh xfce4-power-manager. Ada dua cara untuk mengatasi masalah ini. Yang pertama adalah mengedit
/etc/systemd/logind.conf
file dan menggantiHandleLidSwitch=ignore
denganHandleLidSwitch=suspend
. Tetapi ini akan bersifat sistem, jadi saya hanya menambahkan symlink ke skrip saya# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate
sumber
Solusi lain yang lebih umum dapat Anda gunakan
hybrid-sleep
(seperti Mac OS). Jika komputer Anda mendukung hibernasi, Anda dapat menggunakan fitur ini:Perintah itu harus menangguhkan dan mengirim ke disk (hibernasi) komputer. Setelah beberapa waktu komputer akan mati (saat dinyalakan, ia akan menggunakan file hibernasi untuk bangun).
ps: Saya tahu itu bukan apa yang diposting OP, tapi cukup dekat
sumber
Jangan lupa chmod + x file itu, membuatnya bisa dieksekusi.
Ada solusi lain tanpa rtcwake, menggunakan wakealarm di / sys / class / rtc / rtc0. Manfaatkan kode usang di pm-functions (/ usr / lib / pm-utils) setelah komentar # sejak kernel tidak secara langsung mendukung ..., ('karena kernel saat ini (setelah 3,6 sesuatu) tidak langsung mendukung). Kembalikan kode itu dan masukkan bagian do_suspend () alih-alih do_suspend_hybrid ().
Kode usang (menangguhkan lalu hibernasi ketika suspend_hybrid dipanggil):
Direkomendasikan. Lebih mudah menggunakan uswsusp sementara pada saat yang sama memaksimalkan manfaat s2both yaitu s2both saat ditangguhkan. Masukkan kode yang dikembalikan ke do_suspend () bagian dari modul uswsusp (/usr/lib/pm-utils/module.d).
Kode yang dikembalikan (suspend_hybrid saat suspend dipanggil):
Dengan uswsusp, kita dapat melihat progres suspend / hibernate dan proses sebaliknya ditampilkan dalam teks, bahkan kita dapat membatalkannya dengan menekan backspace. Tanpa uswsusp, suspend / hibernate hanya muncul-menghilang secara mengganggu, terutama ketika wakealarm dipicu dan menjalankan hibernate (s2disk di uswsusp). Atur periode tidur sebelum hibernasi di tempat biasa di file pm-functions.
Inilah mod uswsusp: (ingat, modul ini dipanggil dari pm-functions sehingga variabel yang dimasukkan adalah sama)
sumber