Pertanyaan Jalankan Skrip di Wakeup? [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Apakah ada cara untuk menjalankan skrip ketika komputer "bangun" (dari tidur)? Saya tahu hal itu dapat dilakukan pada saat startup, tentu saja, tetapi masalah dalam hal ini adalah bahwa lampu latar dari laptop saya tampaknya me-reset setiap kali bangun dari tidur, dan saya idealnya ingin memiliki script mengurus mengubahnya hingga ke tingkat yang wajar daripada harus mengetiknya secara manual setiap waktu.


37
2017-12-06 20:18


asal




Jawaban:


pm-utils menyediakan banyak skrip yang berjalan pada sleep / resume, Anda dapat menambahkan skrip Anda di sana, tetapi Anda harus berhati-hati karena mengacaukan kemungkinan akan menghentikan resume. Lihat kedalam /usr/lib/pm-utils/sleep.d, di situlah skripnya, Anda dapat melihat skrip yang disebut 95led karena ini cukup sederhana dan akan menjadi model yang bagus untuk memulai.

95led menyediakan kasus untuk hibernate / suspend and thaw / resume, jika Anda hanya ingin melanjutkan, Anda akan menulis skrip Anda seperti ini:

#!/bin/sh

case "$1" in
    resume)
        echo "hey I just got resumed!"
        run_some_command
esac

Skrip Anda mungkin harus berjalan terakhir, jadi pastikan itu muncul terakhir di direktori, mungkin nama itu 99ZZZ_myscript atau sesuatu. Sekali lagi, jika Anda tidak yakin dengan apa yang Anda lakukan di sini, saya tidak akan mengacaukannya. Anda mungkin akhirnya memutuskan berhenti / melanjutkan. Jika itu terjadi, Anda dapat menghapus skrip atau memperbaikinya, tetapi Anda harus melakukan siklus daya yang sulit untuk mengembalikan sistem Anda.

Mungkin juga ada cara yang lebih sederhana, tetapi saya tahu metode ini akan berhasil.


30
2017-12-06 20:37



terima kasih atas sarannya .. Saya akan menunggu dan melihat apakah ada cara yang lebih aman (jika tidak ada yang datang dengan apa pun saya akan mencobanya / menerima jawaban Anda) - Eva
Jika Anda menguji skrip Anda dengan baik sebelum memasukkannya ke dalam dipanggil oleh skrip resume, saya pikir Anda harus baik-baik saja, cukup uji secara mandiri. Beberapa orang bahkan tidak nyaman menggunakan sudo dan saya ingin memastikan bahwa saya tidak mengarahkan seseorang ke jalan yang salah. Menurut saya, kasus terburuk di sini adalah laptop Anda gagal melanjutkan dan Anda harus memutarnya dan memperbaiki skrip Anda. - mfisch
Saya tidak bisa membuat ini berfungsi. Skrip saya berfungsi dengan baik (melakukan apa yang seharusnya ketika saya menjalankan dari terminal), dan diberi nama 99ZZZ_scriptsOnWake di /usr/lib/pm-utils/sleep.d/ dan itu bisa dieksekusi tetapi tidak ada yang terjadi saat bangun. Apa yang bisa saya lewatkan? - lindhe
@Lindhea Masalah umum adalah variabel lingkungan, yang ada di terminal Anda, tetapi tidak ketika berjalan saat suspend dan melanjutkan. Anda dapat menempatkan output debug di skrip Anda, untuk melihat, apakah itu berjalan sama sekali. - Olaf Dietsche
Ini tidak bekerja dengan systemd seperti pada 15.04 dan seterusnya, lihat jawaban saya di bawah ini. Sangat mirip dengan di atas, sesederhana 8) - SpmP


Di 15.04, Vivid, Anda perlu menempatkan skrip Anda di:

/lib/systemd/system-sleep/

Contoh skrip berdasarkan pada salah satu dari Arch wiki (systemd sleep Hooks):

#!/bin/sh
case $1/$2 in
  pre/*)
    echo "Going to $2..."
    # Place your pre suspend commands here, or `exit 0` if no pre suspend action required
    ;;
  post/*)
    echo "Waking up from $2..."
    # Place your post suspend (resume) commands here, or `exit 0` if no post suspend action required
    ;;
esac

Jangan lupa untuk membuat skrip Anda bisa dieksekusi!

sudo chmod a+x /lib/systemd/system-sleep/your-script

Lihat man systemd-sleep untuk lebih jelasnya.

Tidak perlu sudo sebagai skrip Anda akan dijalankan sebagai root.

catatan: tautan wiki Arch pada subjek (hook tidur sistemd) menyatakan (salah untuk 15.04) bahwa Anda harus menempatkan skrip Anda /usr/lib/systemd/system-sleep/, tetapi ini tidak akan berfungsi di Ubuntu 15.04. Tempatkan skrip Anda /lib/systemd/system-sleep/ jika Anda menjalankan 15.04.


31
2018-05-06 23:00



Bukankah seharusnya skrip tersebut masuk ke / etc di suatu tempat seperti /etc/pm/sleep.d? - Damn Terminal
Itu adalah pikiran saya juga, tetapi ini adalah di mana mereka pergi. - SpmP
Terima kasih untuk itu - menghabiskan waktu mencoba mencari tahu mengapa skrip saya masuk /etc/pm/sleep.d tidak dijalankan pada 15.10. - Nick Craig-Wood


Karena saya tidak memiliki reputasi yang cukup untuk menulis komentar, saya akan menulis ulang solusi dari mfisch dalam menambahkan jawaban untuk Lindh-E:

SOLUSI:

pm-utils menyediakan banyak skrip yang berjalan pada tidur / resume.

Yang Anda butuhkan adalah:

  1. Buat skrip yang disebut 99MyScript.sh (99 memungkinkan untuk menjalankannya setelah skrip lain)
  2. Tambahkan skrip Anda /usr/lib/pm-utils/sleep.d
  3. Tetapkan hak eksekusi: sudo chmod + x /usr/lib/pm-utils/sleep.d/99MyScript.sh
  4. Menguji :)

PERINGATAN :

Anda harus berhati-hati karena mengacaukan kemungkinan akan merusak resume. Jika sistem crash atau macet, Anda dapat menghapus skrip atau memperbaikinya, tetapi Anda harus melakukan siklus daya yang sulit untuk mengembalikan sistem Anda.

CONTOH:

Lihatlah scripti yang ada di /usr/lib/pm-utils/sleep.d. Script yang disebut 95led cukup sederhana dan akan menjadi model yang bagus untuk memulai. 95led menyediakan kasus untuk hibernate / suspend and thaw / resume, jika Anda hanya ingin melanjutkan, Anda akan menulis skrip Anda seperti ini:

#!/bin/sh

case "$1" in
    resume)
        echo "hey I just got resumed!"
        run_some_command
esac

6
2017-12-21 14:31





Ini bukan jawaban independen yang terpisah tetapi karena saya tidak dapat berkomentar (karena pembatasan reputasi) saya hanya ingin menambahkan suplemen penting untuk jawaban mfisch yang juga berhasil bagi saya.

Harap dicatat bahwa HOME dan PATH (dan kemungkinan variabel lingkungan lainnya) mungkin tidak akan sama dengan lingkungan shell biasa Anda. Saya memiliki masalah dengan solusi mfisch yang sepertinya tidak bekerja untuk skrip yang saya perlukan untuk dieksekusi di resume tetapi ternyata itu adalah kesalahan skrip saya karena mereka mengharapkan HOME untuk diatur ke direktori pengguna saya (saya pengguna tunggal di sistem saya) dan untuk PATH untuk memasukkan /usr/local/bin, dan pada titik resume, tidak satu pun dari ini dijamin (dan dalam kasus HOME, mungkin tidak disarankan). Jadi Anda mungkin harus menyesuaikan skrip / program Anda agar tidak bergantung pada env-vars ...


5
2018-06-15 16:36



ya, sistem reputasi terkadang menyebalkan. Tidak sekali pun saya tidak berkontribusi karena reputasi rendah (newb di situs itu) untuk mengirim komentar. Pokoknya poin bagus +1 untuk Anda. - dmnc
Jika Anda merasa bahwa kontribusi Anda adalah peningkatan yang berharga untuk jawaban lain, mohon saran untuk mengubahnya dengan sunting tautan di bawahnya. - David Foerster