Làm thế nào để chạy tập lệnh người dùng sau khi thức dậy systemd?


10

Khi hộp máy tính để bàn debian jessie của tôi thức dậy sau khi ngủ (thông qua hệ thống sáng bóng mới), cài đặt chuột của tôi được trả về mặc định của chúng, sau khi đặt lại tùy chỉnh của tôi

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

Nó chạy khi tôi đăng nhập.

Làm thế nào tôi có thể chạy một tập lệnh người dùng tùy ý khi thức dậy? (giả sử rằng người dùng là chủ sở hữu của phiên X)

Theo như tôi có thể nhớ, sau đây là tùy chỉnh duy nhất tôi đã thực hiện systemdcài đặt (vâng, tôi biết nó hoàn toàn sai vì nó không hoạt động cho người dùng tùy ý, nhưng tôi chưa tìm ra cách để làm điều đó ... điều này có phần liên quan)

Ngoài ra, làm cách nào tôi có thể chạy tập lệnh người dùng tùy ý trước khi thức dậy, với tư cách là người dùng hiện đang sử dụng màn hình 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

Askubfox.com/a/661747 Nó giúp tôi trong trường hợp khác với bạn. Có lẽ nó có thể hữu ích cho bạn.
Gấu chó

Câu trả lời:


5

Câu trả lời này được dựa trên Askubfox.com/a/661747/394818 (cũng được đề cập trong bình luận của @ sun-bear), askubfox.com/q/616272/394818superuser.com/a/1269158/585953 .

Sử dụng dịch vụ hệ thống:

Tạo tập tin /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

Xóa đình chỉ / ngủ đông / lai trong trường hợp dịch vụ chỉ nên được thực hiện sau khi thức dậy từ một loại giấc ngủ cụ thể. Trong trường hợp dịch vụ cần được điều hành bởi một người dùng cụ thể, hãy bỏ ghi chú User=Environment=các dòng và thay thế tên người dùng có liên quan.

Cài đặt tệp dịch vụ với:

sudo systemctl enable my_user_script

Sử dụng dịch vụ người dùng sẽ không hoạt động:

Để tránh đặt tên người dùng được mã hóa cứng User=, người ta có thể tạo cùng một tệp dịch vụ tại .local/share/systemd/user/my_user_script.servicevà kích hoạt với

systemctl --user enable my_user_script

Tuy nhiên, điều đó sẽ không hoạt động. @grawity giải thích chi tiết hơn tại unix.stackexchange.com/a/174837/163108 tại sao lại như vậy:

sleep.targetlà cụ thể cho các dịch vụ hệ thống. Lý do là, sleep.targetkhông phải là một mục tiêu ma thuật tự động được kích hoạt khi đi ngủ. Đây chỉ là một mục tiêu thông thường khiến hệ thống ngủ yên - vì vậy, các trường hợp 'người dùng' tất nhiên sẽ không có tương đương. (Và thật không may, các phiên bản 'người dùng' hiện không có cách nào để phụ thuộc vào các dịch vụ toàn hệ thống.)


3

Tôi đã tạo một tập tin trong / lib / systemd / system-ngủ .

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

Bài viết được gọi vào lúc thức dậy.

BIÊN TẬP:

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


1
Điều này đã không làm việc cho tôi. Bạn có thể liên kết đến một số tài liệu giải thích cách nó hoạt động không?
Ryan Lue

Điều này cũng không làm việc cho tôi. Bối cảnh tập lệnh này chạy trong vô cùng hạn chế và không chạy khi người dùng hoạt động khi hệ thống chuyển sang chế độ ngủ. Vì vậy, nó không có quyền truy cập vào màn hình (không bao gồm hầu hết các tiện ích máy tính để bàn ở đây), thông tin / biến cho người dùng đã đăng nhập hoặc bất kỳ thứ gì khác liên quan đến phiên của người dùng hiện đang đăng nhập. Tôi cần một đoạn mã để chạy như người dùng đã đăng nhập vào bên trong bối cảnh của phiên máy tính để bàn. Tôi vẫn chưa tìm thấy bất cứ điều gì để làm điều này nhưng tôi sẽ cập nhật ở đây nếu tôi làm.
theferrit32

@ theferrit32 bạn sẽ có thể thay đổi thành người dùng ưa thích của mình bằng lệnh 'su' từ trong tập lệnh của bạn.
borizzzzz

1

Mở tệp này:

sudo vim / lib / systemd / system-ngủ / hdparm

Nội dung:

#! / thùng / sh

trường hợp $ 1 trong bài)
    /usr/lib/pm-utils/power.d/95hdparm-apm sơ yếu lý lịch
    ## Dán lệnh của bạn để chạy tập lệnh của bạn
    ;; esac

Lệnh của bạn sẽ thực thi với đặc quyền quản trị viên .

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.