Mengenai alat yang dapat menyimpan profil konfigurasi monitor berdasarkan per pengguna dan per tampilan, autorandr akan melakukan hal itu.
Laptop saya memiliki kartu NVIDIA, jadi saya menggunakan backend disper, bukan xrandr. Autorandr akan menggunakan disper sebagai backend untuk mengelola monitor Anda jika Anda menyebutnya sebagai autodisper
. Untuk sisa postingan ini, saya akan menyebutnya sebagai autorandr
untuk konsistensi.
Anda dapat menyimpan profil dengan autorandr --save profile_name
. Menjalankan autorandr
dengan sendirinya akan memberi Anda daftar profil, dan mengidentifikasi mana yang terdeteksi sebagai konfigurasi saat ini.
Misalnya:
$ autorandr
laptop
syncmaster19 (detected)
Anda dapat memerintahkannya untuk secara otomatis memuat profil yang sesuai untuk konfigurasi saat ini dengan autorandr --change
. Perintah ini, dipasangkan dengan aturan udev untuk menjalankannya saat hotplug, akan melakukan apa yang Anda minta.
Sebagai tindakan pencegahan tambahan, saya telah menambahkan --default laptop
ke perintah itu, yang akan membuatnya default ke tampilan laptop jika tidak ada profil tersimpan yang cocok dengan konfigurasi saat ini. Jadi perintah lengkap yang saya gunakan untuk mengganti tampilan adalah:
autorandr --change --default laptop
Sayangnya mesin saya tidak memberikan keluaran udev saat 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 bagusnya.
Saya menggunakan skrip (buatan sendiri) sederhana ini yang membuat polling RandR dan beralih antara LVDS1 dan VGA1 saat VGA terhubung/terputus. (Untuk HDMI keluaran, dalam file skrip berikut, ubah semua VGA1
ke HDMI1
)
Ini solusi kotor, namun berfungsi dengan baik.
Ini disesuaikan untuk pengaturan saya:kemungkinan besar Anda perlu mengubah nama keluaran RandR (LVDS1
dan VGA1
) dan tidak seperti saya, Anda mungkin akan baik-baik saja dengan mode default RandR Anda untuk VGA.
#!/bin/bash
# setting up new mode for my VGA
xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
xrandr --addmode VGA1 1920x1080
# default monitor is LVDS1
MONITOR=LVDS1
# functions to switch from LVDS1 to VGA and vice versa
function ActivateVGA {
echo "Switching to VGA1"
xrandr --output VGA1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
MONITOR=VGA1
}
function DeactivateVGA {
echo "Switching to LVDS1"
xrandr --output VGA1 --off --output LVDS1 --auto
MONITOR=LVDS1
}
# functions to check if VGA is connected and in use
function VGAActive {
[ $MONITOR = "VGA1" ]
}
function VGAConnected {
! xrandr | grep "^VGA1" | grep disconnected
}
# actual script
while true
do
if ! VGAActive && VGAConnected
then
ActivateVGA
fi
if VGAActive && ! VGAConnected
then
DeactivateVGA
fi
sleep 1s
done
Langkah Lengkap:
-
Letakkan skrip di atas (
homemadeMonitor.sh
) ke direktori pilihan Anda -
Jadikan file .sh dapat dieksekusi dengan mengetikkan perintah berikut di terminal
chmod +x homemadeMonitor.sh
-
Jalankan file .sh
./homemadeMonitor.sh
Menanggapi bagian "[a] cara untuk mengetahui bahwa monitor telah dicolokkan":
Dukungannya masih sedikit berbeda, tetapi dengan kernel terbaru ada beberapa dukungan untuk menghasilkan acara udev saat hotplug tampilan terjadi. Dengan kernel 2.6.38 dan perangkat keras ATI X1400, saya mendapatkan kejadian saat pertama kali saya menyambungkan layar VGA tetapi tidak ada kejadian pada pemutusan atau penyambungan kembali layar selanjutnya. Perangkat keras Intel mungkin memiliki dukungan yang lebih baik. Driver berpemilik NVIDIA saat ini tidak mendukung KMS; Saya belum mencoba mencari kejadian hotplug di perangkat keras NVIDIA, tetapi saya ragu ini akan berhasil.
Jika Anda ingin bereksperimen dengan udev, Anda dapat mencoba langkah-langkah berikut:
- perbarui ke kernel terbaru
- pastikan bahwa pengaturan mode kernel (KMS) diaktifkan. Jika diaktifkan, itu harus dilaporkan dalam keluaran kernel Anda. Milik saya mengatakan
[drm] radeon kernel modesetting enabled
dan[drm] initializing kernel modesetting
- jalankan
udevadm monitor --property
dan lihat apakah peristiwa dilaporkan saat Anda (melepaskan) tampilan
Jika Anda mendapatkan acara udev di display hotplug, Anda dapat memicu skrip dengan aturan udev seperti:
ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/path/to/hotplug.sh"
Catatan: Ini tidak berfungsi jika Anda menggunakan GPU nVIDIA dengan driver biner berpemilik, karena tidak menggunakan KMS. Anda tidak dapatkan acara udev apa pun.