apakah ada alat yang memungkinkan seseorang untuk:
- ingat konfigurasi RandR saat ini (posisi, orientasi, resolusi dll) berdasarkan monitor,
- secara otomatis menerapkan konfigurasi yang baik yang diketahui terakhir segera setelah layar dicolokkan, tanpa perlu main-main dengan applet atau xrandr (1)?
Konfigurasi harus diterapkan pada per-pengguna, per-tampilan.
Jika tidak ada alat seperti itu di alam liar, saya ingin menyatukannya sendiri, tetapi sejauh yang saya bisa lihat, tidak ada cara untuk mengatakan bahwa monitor telah dipasang. Apakah saya harus melakukan polling dengan xrandr -q sesekali untuk mengetahui bahwa output terhubung atau terputus, atau apakah ada cara yang lebih efisien untuk melakukannya? Bisakah udev disetel untuk melakukan hal itu?
udevadm monitor --property
dari terminal dan sambungkan monitor. Dengan kartu saya, saya melihat suatu peristiwa ketika dicolokkan. Anda mungkin dapat menggunakan aturan + RUN di udev dan beberapa skrip bash untuk mendapatkan yang Anda inginkan. Namun, saya tidak yakin bagaimana Anda bisa menerapkan ini pada basis per pengguna menggunakan udev.Jawaban:
Saya menggunakan skrip sederhana (buatan sendiri) yang membuat polling RandR dan beralih antara LVDS1 dan VGA1 ketika VGA terhubung / terputus. (Untuk output HDMI , dalam file skrip berikut, ubah semua
VGA1
keHDMI1
)Ini solusi kotor, namun berhasil dengan baik.
Ini disesuaikan untuk pengaturan saya: Anda kemungkinan besar perlu mengubah nama output RandR (
LVDS1
danVGA1
) dan tidak seperti saya Anda mungkin akan baik-baik saja dengan mode default RandR Anda untuk VGA.Langkah Lengkap:
Ctrl+Alt+t
Arahkan ke lokasi yang baik untuk membuat dan menyimpan skrip shell auto-switching. Contoh
cd ./Desktop/
Buat dan edit file .sh dengan editor teks yang Anda inginkan (di sini, saya menggunakan pluma. Anda dapat mencoba nano, vim, dll). Beri nama sesuai kenyamanan Anda. Contoh
sudo pluma homemadeMonitor.sh
Edit file dan salin rekatkan semua dari skrip yang disebutkan di atas (file dengan #! / Bin / bash)
Buat file .sh dapat dieksekusi dengan mengetikkan perintah berikut di terminal
sudo chmod +x homemadeMonitor.sh
Jalankan file .sh
./homemadeMonitor.sh
sumber
Menanggapi cara "[a] untuk memberi tahu bahwa monitor telah dipasang" bagian dari pertanyaan:
Dukungan masih bervariasi sedikit, tetapi dengan kernel baru-baru ini ada beberapa dukungan untuk menghasilkan peristiwa udev ketika hotplug tampilan muncul. Dengan kernel 2.6.38 dan perangkat keras ATI X1400, saya mendapatkan sebuah acara saat pertama kali saya menghubungkan layar VGA tetapi tidak ada kejadian pada pemutusan berikutnya atau menghubungkan kembali layar. Perangkat keras Intel mungkin memiliki dukungan yang lebih baik. Driver berpemilik NVIDIA saat ini tidak mendukung KMS; Saya belum mencoba mencari acara hotplug pada perangkat keras NVIDIA, tapi saya ragu itu akan berhasil.
Jika Anda ingin bereksperimen dengan udev Anda bisa mencoba langkah-langkah berikut:
[drm] radeon kernel modesetting enabled
dan[drm] initializing kernel modesetting
udevadm monitor --property
dan lihat apakah acara dilaporkan ketika Anda (dis-) menghubungkan displayJika Anda mendapatkan acara udev pada hotplug tampilan, Anda dapat memicu skrip dengan aturan udev seperti:
Catatan: Ini tidak akan berfungsi jika Anda menggunakan GPU nVIDIA dengan driver biner berpemilik, karena tidak menggunakan KMS. Anda tidak akan mendapatkan acara udev.
sumber
Mengenai alat yang dapat menyimpan profil konfigurasi monitor berdasarkan per pengguna dan per tampilan, autorandr akan melakukan hal itu. https://github.com/wertarbyte/autorandr .
Laptop saya memiliki kartu NVIDIA, jadi saya menggunakan backend disper alih-alih xrandr: http://willem.engen.nl/projects/disper/ . Autorandr akan menggunakan disper sebagai backend untuk mengelola monitor Anda jika Anda menyebutnya sebagai
autodisper
. Untuk sisa posting ini, saya akan merujuknya sebagaiautorandr
konsistensi.Anda dapat menyimpan profil dengan
autorandr --save profile_name
. Berjalanautorandr
dengan sendirinya kemudian akan memberi Anda daftar profil, dan mengidentifikasi mana yang terdeteksi sebagai konfigurasi saat ini.Misalnya:
Anda dapat memerintahkannya untuk memuat profil yang sesuai secara otomatis dengan konfigurasi saat ini
autorandr --change
. Perintah ini, dipasangkan dengan aturan udev untuk menjalankannya ketika dicolokkan, akan melakukan apa yang Anda minta.Sebagai tindakan pencegahan tambahan, saya telah menambahkan
--default laptop
perintah itu, yang akan menjadikannya default untuk tampilan laptop jika tidak ada profil tersimpan yang cocok dengan konfigurasi saat ini. Jadi perintah lengkap yang saya gunakan untuk mengganti display adalah:Sayangnya mesin saya tidak memberikan output udev ketika saya menghubungkan monitor saya. Saya menggunakan driver berpemilik NVIDIA, jadi itu tidak mengejutkan. Jadi saya telah mengikatnya ke tombol XF68Display (Fn-F8) untuk saat ini, yang hampir sama baiknya.
sumber
udev
autorandr
: github.com/phillipberndt/autorandrSaya menggunakan aturan udev yang disarankan di atas bersama dengan skrip shell yang terlihat seperti
Bagian Xauthority sangat penting serta ekspor
DISPLAY
, Anda dapat menggunakan gema$DISPLAY
untuk melihat nomor yang sama dengan. Gunakanxrandr -q
untuk melihat monitor eksternal yang Anda miliki. Pernyataan lain terakhir adalah hanya untuk memastikan bahwa Anda tidak pernah terjebak tanpa tampilan.sumber
Sebuah program kecil yang menunggu server X untuk memberi tahu tentang perubahan konfigurasi monitor, dan kemudian menjalankan perintah yang diberikan (misalnya yang
autorandr
disebutkan dalam jawaban lain) tersedia di: https://bitbucket.org/portix/srandrd/overviewIni tampaknya menjadi solusi bersih yang menggunakan
udev
(di mana Anda harus khawatir menemukan server X yang tepat, dll.)sumber
Jika Anda harus memilikinya secara otomatis mendeteksi tampilan ketika dicolokkan, sepertinya solusi terbersih adalah menambahkan aturan UDEV untuk menjalankan skrip yang berisi perintah xrandr Anda. Berikut adalah contoh dari solusi satu pengguna 1 :
Monitor (output) acara UDEV dengan
udevadm
Langkah ini akan menjadi yang paling penting untuk setiap pengguna. Lari
udevadm monitor --environment --udev
. Kemudian sambungkan kabel HDMI Anda.Aturan UDEV
Berdasarkan output dari perintah di atas, pengguna membuat aturan UDEV ini di
/etc/udev/rules.d/95-monitor-hotplug.rules
.Perhatikan variabel lingkungan yang digunakan sehingga xrandr akan dijalankan di bawah profil pengguna.
skrip xrandr hotplug_monitor.sh
Anda mungkin ingin menyesuaikan opsi xrandr sesuai dengan kebutuhan Anda.
sumber
Bagi mereka yang, untuk alasan apa pun, tidak ingin mengambil rute hotplug, masih mungkin untuk tidak melakukan polling dalam skrip menggunakan inotifywait:
Polling dengan xrandr memberikan masalah kegunaan serius pada laptop baru saya (mouse akan berhenti secara berkala).
sumber
Saat menggunakan solusi peoro, saya mendapat beberapa output tambahan dari xrandr, jadi saya menggunakan opsi -c untuk grep yang menghitung jumlah kecocokan. Saya mengadaptasinya untuk HDMI dan menambahkan saklar audio juga:
sumber
Saya kira orang-orang yang melihat pertanyaan ini bukan mereka yang ingin menggunakan GNOME, dan mereka yang menggunakan GNOME tidak harus melihat pertanyaan ini, tetapi demi kepentingan kelengkapan:
GNOME memiliki fungsi ini bawaan. Jika Anda mengubah pengaturan melalui gnome-control-center, gnome-settings-daemon akan mengingatnya (masuk
.config/monitors.xml
) dan secara otomatis menerapkannya ketika monitor dicolokkan ke dalam atau keluar.Sayangnya konfigurasi dalam file monitor.xml tidak terdokumentasi dengan baik. Lihat pertanyaan di sini . Tool display gnome juga tidak memiliki cara mengatur panning, scaling per monitor dan tidak melakukan zoom-out. Karena banyak orang menggunakan layar laptop HiDPI bersama-sama dengan layar DPI biasa, alat tidak cukup untuk mendapatkan solusi yang bisa diterapkan.
Saya telah melihat ini disebutkan sebagai item peta jalan untuk Wayland jadi ketika akhirnya tiba kita mungkin melihat perbaikan untuk masalah yang disebutkan. Sampai saat itu di Gnome saya baru saja menjalankan skrip startup setelah penundaan untuk men-setup xrandr secara manual.
sumber
Untuk mempermudah dalam Xfce misalnya, silakan instal "arandr" yang harus tersedia dalam paket distro Anda. Konfigurasikan tampilan Anda menggunakan "arandr" lalu simpan sebagai "displayLayout" misalnya. Arandr harus menambahkan untuk Anda ekstensi ".sh" sehingga dapat langsung digunakan dalam "function connect ()" seperti yang tertulis dalam skrip "hotplug_monitor.sh" yang disebutkan oleh iyrin di atas, misalnya:
Untuk menggunakan mekanisme putuskan, tambahkan di bagian atas skrip tepat di bawah "#! / Bin / bash" seperti:
xrandr akan mendeteksi tampilan dan meneruskan keluaran ke awk yang akan memfilternya berdasarkan ekspresi reguler "terhubung" diikuti oleh digit yang intinya adalah apa yang kita inginkan. Menurut pendapat saya tidak perlu untuk mencocokkan resolusi tepat dalam ekspresi reguler karena tampilan utama dilaporkan sebagai "primer terhubung" diikuti oleh nomor yaitu resolusi. Kemudian awk "print $ 1" hanya akan mencetak kolom pertama yang merupakan nama monitor eksternal dalam kasus ini dan ini akan disimpan dalam variabel PLUGGED_EXTERNAL. Selanjutnya alih-alih nama tampilan tetap "HDMI1" dalam skrip $ PLUGGED_EXTERNAL dapat digunakan seperti ini:
sumber
Mengedit jawaban saya untuk mempermudah pengaturan.
Instal autorandr untuk mengotomatiskan tata letak layar di xrandr, ambil .deb terbaru dari https://github.com/nalipaz/autorandr/releases dan jalankan:
Atur autorandr dengan tata letak layar yang tersimpan
Sebagai contoh, pada laptop saya tanpa monitor terpasang, saya mengatur arandr seperti yang saya inginkan, lalu menjalankan:
Kemudian dicolokkan ke HDMI saya dan konfigurasi ulang arandr, lalu jalankan:
Setelah mengatur setiap tata letak Anda, Anda dapat menjalankan (ganti 'ponsel' dengan nama yang disukai sebelumnya, saya menggunakan ponsel):
Sekarang autorandr sudah siap, Anda dapat mengotomatiskan proses dengan menginstal paket yang akan polling untuk tampilan yang terhubung dan berjalan
autorandr --change
pada deteksi. Ya, saya tahu tentang udev dan Anda dapat mengaturnya jika itu berfungsi untuk Anda, tetapi dalam pengujian saya udev tidak bekerja untuk HDMI saya secara konsisten. Ini hanya bekerja 1 dari setiap 20 colokan / cabut atau lebih, dan kadang-kadang berhenti sama sekali.Unduh deb terbaru dari sini: https://github.com/nalipaz/poll-xrandr/releases/ lalu instal dengan
Kemungkinan besar Anda perlu menjalankan lebih banyak tugas setelah selesainya
autorandr --change
, autorandr memungkinkan perintah-perintah ini dimasukkan ke dalam file bernama ~ / .autorandr / postswitch. Lakukan sebagai berikut:Sekarang edit file postswitch untuk memiliki sesuatu yang mirip dengan yang berikut:
Selain itu, Anda mungkin ingin menambahkan autorandr dan poll-xrandr ke startup Anda, sesuatu seperti dua perintah berikut:
Cabut atau tancapkan monitor dan tonton keajaibannya!
sumber