Oke, apa yang sudah Anda coba? Apa kata google? Sudahkah Anda mencoba mencari tahu bagaimana screensaver mendeteksi ini? Silakan luangkan waktu untuk mencari sebelum memposting pertanyaan di sini dan baca Bagaimana cara mengajukan pertanyaan yang bagus .
terdon
Saya hanya menemukan sebuah program xautolocktetapi tidak ada contoh
Jawaban:
20
Saya menggunakan program yang dipanggil xprintidleuntuk mencari tahu waktu X idle, yang saya duga menggunakan sumber data yang sama dengan screensaver. xprintidlesepertinya tidak benar-benar memiliki upstream lagi, tetapi paket Debian masih hidup dan sehat.
Ini adalah aplikasi yang sangat sederhana: ia mengembalikan jumlah milidetik sejak interaksi X terakhir:
(catatan: karena sistem yang mendasarinya, secara konsisten akan memberikan nilai dalam ms sedikit lebih rendah dari waktu idle "aktual").
Anda dapat menggunakan ini untuk membuat skrip yang menjalankan urutan tertentu setelah lima menit waktu idle melalui mis:
#!/bin/sh# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((5*60*1000))# Sequence to execute when timeout triggers.
trigger_cmd(){
echo "Triggered action $(date)"}
sleep_time=$IDLE_TIME
triggered=false# ceil() instead of floor()while sleep $(((sleep_time+999)/1000));do
idle=$(xprintidle)if[ $idle -ge $IDLE_TIME ];thenif! $triggered;then
trigger_cmd
triggered=true
sleep_time=$IDLE_TIMEfielse
triggered=false# Give 100 ms buffer to avoid frantic loops shortly before triggers.
sleep_time=$((IDLE_TIME-idle+100))fidone
Offset 100 ms adalah karena kekhasan yang dicatat sebelumnya yang xprintidleakan selalu mengembalikan waktu yang sedikit lebih rendah daripada waktu idle "aktual" ketika dijalankan seperti ini. Ini akan bekerja tanpa offset ini, dan kemudian akan lebih akurat hingga sepersepuluh detik, tetapi akan memicu xprintidlepemeriksaan dengan panik selama milidetik terakhir sebelum interval berakhir. Bukan kinerja babi dengan cara apa pun, tapi saya akan menemukan bahwa canggung.
Saya telah menggunakan pendekatan yang sama dalam skrip Perl (sebuah plugin irssi) untuk beberapa waktu, tetapi yang di atas hanya ditulis dan belum benar-benar diuji kecuali untuk beberapa percobaan berjalan selama penulisan.
Cobalah dengan menjalankannya di terminal dalam X. Saya sarankan mengatur batas waktu untuk misalnya 5000 ms untuk pengujian, dan menambahkan set -xlangsung di bawah ini #!/bin/shuntuk mendapatkan output informatif untuk melihat cara kerjanya.
Setelah ini diinstal saya mengkompilasi di atas seperti ini:
$ gcc xidle.c -o xidle -lX11 -lXext -lXss
Anda dapat melihat bahwa ia dapat melaporkan jumlah detik yang dideteksi X sebagai waktu idle dengan menjalankannya seperti ini:
$ while[1];do./xidle ; sleep 2;done0.0050001.9480003.9540005.9590007.9650000.073000<--- moved the mouse here which resets it0.035000
Dengan menggunakan executable ini, Anda dapat membuat skrip yang dapat melakukan hal seperti ini, memantau waktu idle yang dilaporkan oleh xidle.
$ while[1];do idle=$(./xidle);[ $( echo "$idle > 5"| bc )-eq 0]&& echo "still < 5"|| echo "now > 5";
sleep 2;done
still <5
still <5
still <5
now >5
now >5
still <5
still <5
still <5
Di atas menunjukkan still < 5hingga 5 detik waktu idle telah berlalu, pada titik mana ia mulai berkata now > 5, yang berarti bahwa 5+ detik telah berlalu.
CATATAN: Anda dapat memasukkan Anda notify-send 'a'ke dalam contoh di atas.
xautolock
tetapi tidak ada contohJawaban:
Saya menggunakan program yang dipanggil
xprintidle
untuk mencari tahu waktu X idle, yang saya duga menggunakan sumber data yang sama dengan screensaver.xprintidle
sepertinya tidak benar-benar memiliki upstream lagi, tetapi paket Debian masih hidup dan sehat.Ini adalah aplikasi yang sangat sederhana: ia mengembalikan jumlah milidetik sejak interaksi X terakhir:
(catatan: karena sistem yang mendasarinya, secara konsisten akan memberikan nilai dalam ms sedikit lebih rendah dari waktu idle "aktual").
Anda dapat menggunakan ini untuk membuat skrip yang menjalankan urutan tertentu setelah lima menit waktu idle melalui mis:
Offset 100 ms adalah karena kekhasan yang dicatat sebelumnya yang
xprintidle
akan selalu mengembalikan waktu yang sedikit lebih rendah daripada waktu idle "aktual" ketika dijalankan seperti ini. Ini akan bekerja tanpa offset ini, dan kemudian akan lebih akurat hingga sepersepuluh detik, tetapi akan memicuxprintidle
pemeriksaan dengan panik selama milidetik terakhir sebelum interval berakhir. Bukan kinerja babi dengan cara apa pun, tapi saya akan menemukan bahwa canggung.Saya telah menggunakan pendekatan yang sama dalam skrip Perl (sebuah plugin irssi) untuk beberapa waktu, tetapi yang di atas hanya ditulis dan belum benar-benar diuji kecuali untuk beberapa percobaan berjalan selama penulisan.
Cobalah dengan menjalankannya di terminal dalam X. Saya sarankan mengatur batas waktu untuk misalnya 5000 ms untuk pengujian, dan menambahkan
set -x
langsung di bawah ini#!/bin/sh
untuk mendapatkan output informatif untuk melihat cara kerjanya.sumber
Saya menggunakan
xssstate
untuk tujuan seperti itu. Ini tersedia dalamsuckless-tools
paket di Debian atau Ubuntu , atau hulu .Kemudian Anda dapat menggunakan skrip shell berikut:
sumber
Inilah aplikasi C yang saya temukan yang dapat Anda kompilasi.
Perlu beberapa perpustakaan untuk membangun. Pada sistem Fedora 19 saya, saya membutuhkan perpustakaan berikut:
Setelah ini diinstal saya mengkompilasi di atas seperti ini:
Anda dapat melihat bahwa ia dapat melaporkan jumlah detik yang dideteksi X sebagai waktu idle dengan menjalankannya seperti ini:
Dengan menggunakan executable ini, Anda dapat membuat skrip yang dapat melakukan hal seperti ini, memantau waktu idle yang dilaporkan oleh
xidle
.Di atas menunjukkan
still < 5
hingga 5 detik waktu idle telah berlalu, pada titik mana ia mulai berkatanow > 5
, yang berarti bahwa 5+ detik telah berlalu.CATATAN: Anda dapat memasukkan Anda
notify-send 'a'
ke dalam contoh di atas.Referensi
sumber
port bsd (kumpulan paket) memiliki program yang dapat melakukan ini:
http://man.openbsd.org/OpenBSD-current/man1/xidle.1
itu tersedia misalnya di sini:
http://distcache.freebsd.org/local- distfiles / novel / xidle-26052015.tar.bz2
membangun seperti:
perhatikan bahwa -program perlu memuat path lengkap ke biner, karena ini diteruskan ke execv ().
sumber