Apakah ada setiap peristiwa yang dipicu ketika saya pasang atau keluar monitor eksternal ke dalam DisplayPort dari laptop saya? ACPID dan UDEV tidak bereaksi sama sekali.
Saya menggunakan grafis onboard pada chip intel. Ini diskusi serupa yang sudah berumur beberapa tahun.
Saya tidak ingin menggunakan polling tetapi saya perlu memiliki beberapa konfigurasi yang mengatur pengaturan tampilan secara otomatis tergantung pada apakah layar terhubung.
udev
monitors
acpi
multi-monitor
janoliver
sumber
sumber
Jawaban:
CATATAN: Ini diuji pada laptop dengan kartu grafis yang digerakkan i915.
Latar Belakang
CATATAN: Ketika layar baru dicolokkan, tidak ada acara dikirim ke tuan rumah, ini tetap benar bahkan setelah edit terakhir saya. Jadi satu-satunya cara adalah menggunakan polling. Mencoba menjadikannya seefisien mungkin ...
EDIT # 3
Akhirnya ada satu solusi yang lebih baik (melalui ACPI):
Masih belum ada acara, tetapi ACPI tampaknya lebih efisien daripada
xrandr
bertanya. (Catatan: Ini membutuhkan modul kernel ACPI yang dimuat, tetapi tidak memerlukan hak akses root).Solusi terakhir saya (menggunakan bash):
Sekarang ujian:
Itu sudah terhubung, jadi sekarang saya mencabutnya:
CATATAN:
${1:+*-1+1}
mengizinkan boolean argumen: Jika ada sesuatu yang hadir , jawabannya akan terbalik:( crtState >> 4 ) * -1 + 1
.dan skrip terakhir:
PERINGATAN: lebih ringan dari
xrandr
, tetapi tidak penting dengan penundaan lebih kecil dari 0,02 detik, skrip Bash akan pergi ke bagian atas proses pemakan sumber daya (top
)!Sementara ini biaya ~ 0,001 detik:
Ini membutuhkan ~ 0,030 detik:
Ini besar! Jadi tergantung pada apa yang Anda butuhkan,
delay
bisa diatur antara0.5
dan2
.EDIT # 2
Saya akhirnya menemukan sesuatu, menggunakan ini:
Penafian penting: Bermain dengan
/proc
dan/sys
entri dapat merusak sistem Anda !!! Jadi jangan coba yang berikut ini pada sistem produksi.... setelah beberapa pembersihan entri yang tidak diinginkan:
Saya sudah bisa membaca ini:
Saat saya mencolokkan, cabut, dan pasang kembali kabel monitor.
Jawaban AsliKetika konfigurasi diminta (berjalan
system/preferences/monitor
atauxrandr
), kartu grafis melakukan jenis pemindaian , jadi menjalankanxrandr -q
memberi Anda info, tetapi Anda harus polling status.Saya telah memindai semua log, (kernel, daemon, X, dan sebagainya) mencari melalui
/proc
&/sys
, dan tampaknya tidak ada yang memenuhi permintaan Anda.Saya sudah mencoba ini juga:
Setelah semua itu, jika Anda menjalankan
System/Preferences/Monitor
sementara tidak ada layar baru yang baru saja dicolokkan, atau dicabut, alat akan muncul secara sederhana (normal). Tetapi jika Anda sudah memasang atau mencabut layar sebelumnya, kadang-kadang Anda akan menjalankan alat ini dan Anda akan melihat desktop Anda membuat jenis reset atau refresh (sama jika Anda menjalankanxrandr
).Ini sepertinya mengkonfirmasi bahwa alat ini meminta
xrandr
(atau bekerja dengan cara yang sama) dengan memungut status secara berkala, mulai saat dijalankan.Anda bisa mencoba sendiri:
Ini akan menampilkan berapa banyak layar (display) yang terhubung, selama 10 detik.
Saat ini berjalan, pasang dan / atau cabut layar / monitor Anda dan lihat apa yang terjadi. Jadi Anda bisa membuat fungsi tes Bash kecil:
yang bisa digunakan seperti pada:
Tapi hati-hati,
xrandr
butuh sekitar 0,140 detik hingga 0,200 detik sementara tidak ada perubahan yang terjadi pada colokan dan hingga 0,700 detik setiap kali sesuatu dicolokkan atau dicabut tepat sebelumnya ( CATATAN: Tampaknya bukan menjadi pemakan sumber daya).EDIT # 1
Untuk memastikan saya tidak mengajarkan sesuatu yang salah, saya telah mencari di Web dan dokumen, tetapi tidak menemukan apa pun tentang DBus dan Layar .
Akhirnya, saya telah menjalankan di dua jendela yang berbeda
dbus-monitor --system
(saya telah bermain dengan opsi juga) dan skrip kecil yang saya tulis:... dan lagi terpasang, daripada mencabut monitor, berkali-kali. Jadi sekarang saya bisa mengatakan:
xrandr -q
untuk mengetahui apakah monitor dicolokkan atau tidak.Tetapi berhati-hatilah, karena tampaknya tidak ada cara lain. Misalnya,
xrandr
sepertinya membagikan informasi ini, sehingga desktop GNOME saya akan beralih kexinerama
secara otomatis ... ketika saya berlarixrandr
.Beberapa dokumen
sumber
Baris berikut muncul di
udevadm monitor
saat memasang monitor ke Konektor-VGA. Jadi mungkin ada cara untuk mencari tahu ini.
sumber
Bagi mereka yang, untuk alasan apa pun, tidak ingin mengambil rute hotplug, masih mungkin untuk tidak melakukan polling dalam skrip menggunakan inotifywait:
Paling baik dipanggil dari .xsessionrc Anda, jangan lupa bagian akhirnya &. Polling dengan xrandr memberikan masalah kegunaan serius pada laptop baru saya (mouse akan berhenti secara berkala).
sumber
/proc
dan hanya melakukaninotifywait -q -e close /sys/class/drm/card0-DP-2/status
memang tidak berakhir setelah melepas DP-2 pada sistem sayaSaya terjebak menggunakan srandrd . Ini memonitor peristiwa X dan memicu skrip Anda ketika layar terhubung atau terputus.
sumber
Jelas harus ada sesuatu! :) / sys filesystem memberitahu userspace perangkat keras apa yang tersedia, jadi alat userspace (seperti udev atau mdev) dapat secara dinamis mengisi direktori "/ dev" dengan node perangkat yang mewakili perangkat yang saat ini tersedia perangkat keras. Linux menyediakan dua antarmuka hotplug: / sbin / hotplug dan netlink.
Ada demo C kecil di file berikut. http://www.kernel.org/doc/pending/hotplug.txt
sumber
Sebagian besar perangkat lunak sistem / aplikasi di Linux saat ini menggunakan beberapa teknik IPC untuk berkomunikasi satu sama lain. D-Bus sekarang sebagian besar digunakan dengan aplikasi GNOME, dan mungkin membantu.
Jurnal Linux:
wiki:
Bahkan ada perpustakaan Python untuk ini, dan ubuntu baru-baru ini menggunakan kemampuan ini yang disebut " zeitgeist ".
sumber
Secara grafis Anda dapat melihat apakah monitor dikenali
Monitor
, saya tahu Anda dapat menemukannya di Ubuntu, Fedora, dan lainnya di lokasi ini (atau yang serupa).Dan Anda dapat menghidupkan / mematikan monitor yang Anda inginkan atau menggunakan keduanya secara bersamaan dengan duplikat gambar di monitor atau monitor independen
sumber