cara menjalankan skrip pengguna setelah bangun systemd?

10

Ketika kotak desktop debian jessie saya bangun dari tidur (melalui sistem mengkilap yang baru) pengaturan mouse saya dikembalikan ke pengaturan default, setelah mengatur ulang penyesuaian saya

xinput set-prop 12 'Device Accel Constant Deceleration' 2.5

yang berjalan saat saya masuk.

bagaimana saya bisa menjalankan skrip pengguna sewenang-wenang saat bangun? (asumsikan bahwa pengguna adalah pemilik sesi X)

Sejauh yang saya ingat, berikut ini adalah satu-satunya penyesuaian yang saya buat dari systemdpengaturan (ya, saya tahu itu sepenuhnya salah karena tidak berfungsi untuk pengguna yang sewenang-wenang, tetapi saya belum mengetahui bagaimana cara melakukannya ... ini agak terkait)

selain itu, bagaimana saya bisa menjalankan skrip pengguna yang sewenang-wenang sebelum bangun, sebagai pengguna yang saat ini menggunakan layar X?

cat /etc/systemd/system/i3lock.service

#systemctl enable i3lock.service

[Unit]
Description=i3lock
Before=sleep.target

[Service]
User=fommil
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/i3lock -c 000000

[Install]
WantedBy=sleep.target
fommil
sumber
askubuntu.com/a/661747 Ini membantu saya dalam kasus saya yang berbeda dengan Anda. Mungkin ini bisa bermanfaat bagi Anda.
Sun Bear

Jawaban:

5

Jawaban ini didasarkan pada askubuntu.com/a/661747/394818 (sebagaimana juga disebutkan dalam komentar oleh @ sun-bear), askubuntu.com/q/616272/394818 dan superuser.com/a/1269158/585953 .

Menggunakan layanan sistem:

Buat file /etc/systemd/system/my_user_script.service:

[Unit]
Description=Run my_user_script
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target


[Service]
ExecStart=/path/to/my_user_script
#User=my_user_name
#Environment=DISPLAY=:0

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

Hapus suspend / hibernate / hybrid jika layanan hanya dapat dieksekusi setelah bangun dari jenis tidur tertentu. Dalam hal layanan perlu dijalankan oleh pengguna tertentu, tanda komentar pada User=dan Environment=garis dan mengganti nama pengguna yang relevan.

Instal file layanan dengan:

sudo systemctl enable my_user_script

Menggunakan layanan pengguna tidak akan berfungsi:

Untuk menghindari pengaturan nama pengguna dengan kode keras User=, seseorang dapat membuat file layanan yang sama persis .local/share/systemd/user/my_user_script.servicedan mengaktifkannya

systemctl --user enable my_user_script

Namun, itu tidak akan berhasil. @grawity menjelaskan lebih detail di unix.stackexchange.com/a/174837/163108 mengapa itu adalah:

sleep.targetkhusus untuk layanan sistem. Alasannya, sleep.targetbukan target ajaib yang secara otomatis akan diaktifkan ketika akan tidur. Ini hanya target reguler yang membuat sistem tidur - jadi contoh 'pengguna' tentu saja tidak akan memiliki yang setara. (Dan sayangnya instans 'pengguna' saat ini tidak memiliki cara untuk bergantung pada layanan seluruh sistem.)

DavidVitch
sumber
3

Saya membuat file di / lib / systemd / system-sleep .

#!/bin/sh
case $1 in
  post)
    /bin/runme
  ;;
esac

The pasca disebut saat pengaktifan.

EDIT:

https://www.freedesktop.org/software/systemd/man/systemd-suspend.service.html

gam3
sumber
1
Ini tidak berhasil untuk saya. Bisakah Anda menautkan ke beberapa dokumentasi yang menjelaskan bagaimana itu seharusnya bekerja?
Ryan Lue
Ini tidak bekerja untuk saya juga. Konteks skrip ini berjalan sangat terbatas, dan tidak berjalan sebagai pengguna yang aktif ketika sistem pergi tidur. Jadi itu tidak mendapatkan akses ke tampilan (yang mengecualikan sebagian besar utilitas desktop di sini), info / variabel untuk pengguna yang masuk, atau apa pun yang terkait dengan sesi pengguna yang saat ini masuk. Saya perlu skrip untuk dijalankan sebagai pengguna yang masuk di dalam konteks sesi desktop. Saya masih belum menemukan apa pun untuk melakukan ini tetapi saya akan memperbarui di sini jika saya melakukannya.
theferrit32
@ theferrit32 Anda harus dapat mengubah ke pengguna pilihan Anda dengan perintah 'su' dari dalam skrip Anda.
borizzzzz
1

Buka file ini:

sudo vim / lib / systemd / system-sleep / hdparm

Isi:

#! / bin / sh

huruf $ 1 dalam pos)
    /usr/lib/pm-utils/power.d/95hdparm-apm dilanjutkan
    ## Tempel perintah Anda untuk menjalankan skrip Anda
    ;; esac

Perintah Anda akan dijalankan dengan hak istimewa admin .

Abhishek Singh
sumber