czy istnieje narzędzie, które umożliwia:
- zapamiętuje aktualną konfigurację RandR (położenie, orientację, rozdzielczość itp.) dla poszczególnych monitorów,
- automatycznie zastosować ostatnią znaną dobrą konfigurację, gdy tylko wyświetlacz zostanie podłączony, bez potrzeby przeszukiwania apletów lub xrandr (1)?
Konfiguracje musiałyby być stosowane dla poszczególnych użytkowników i dla poszczególnych wyświetlaczy.
Jeśli nie ma takiego narzędzia na wolności, sam chciałbym złożyć je razem, ale o ile widzę, nie ma sposobu, aby stwierdzić, że monitor został podłączony. Czy muszę sondować za pomocą xrandr -q raz na jakiś czas, aby dowiedzieć się, czy wyjście zostało podłączone lub odłączone, czy jest bardziej skuteczny sposób, aby to zrobić? Czy uda się to dostroić?
udevadm monitor --property
z terminala i podłączyć monitor. Z moją kartą widzę zdarzenie, gdy jest ono podłączone. Możesz użyć reguły + RUN w udev i trochę skryptów bash, aby uzyskać to, czego chcesz. Nie jestem jednak pewien, w jaki sposób można to zaimplementować dla poszczególnych użytkowników za pomocą udev.Odpowiedzi:
Korzystam z tego prostego (domowego) skryptu, który stale odpytuje RandR i przełącza się między LVDS1 i VGA1, gdy VGA zostanie podłączone / rozłączone. (Dla HDMI wyjść w poniższym pliku skryptu, zmienić wszystko
VGA1
doHDMI1
)To brudne rozwiązanie, ale działa dobrze.
Jest dostosowany do mojej konfiguracji: najprawdopodobniej będziesz musiał zmienić nazwy wyjściowe RandR (
LVDS1
iVGA1
) i w przeciwieństwie do mnie prawdopodobnie będziesz zadowolony z domyślnego trybu RandR dla VGA.Pełne kroki:
Ctrl+Alt+t
Przejdź do dobrej lokalizacji, aby utworzyć i zapisać skrypt powłoki z automatycznym przełączaniem. Przykład
cd ./Desktop/
Utwórz i edytuj plik .sh za pomocą żądanego edytora tekstu (tutaj użyłem Plumy. Możesz wypróbować nano, vim itp.). Nazwij to dla swojej wygody. Przykład
sudo pluma homemadeMonitor.sh
Edytuj plik i skopiuj wklej wszystko ze wspomnianego wyżej skryptu (tego z #! / Bin / bash)
Spraw, aby plik .sh był wykonywalny, wpisując następujące polecenie w terminalu
sudo chmod +x homemadeMonitor.sh
Uruchom plik .sh
./homemadeMonitor.sh
źródło
W odpowiedzi na „[a] sposób, aby powiedzieć, że monitor został podłączony” część pytania:
Obsługa wciąż jest bardzo zróżnicowana, ale w najnowszych jądrach jest dostępna obsługa generowania zdarzeń udev, gdy pojawia się hotplug wyświetlania. W przypadku jądra 2.6.38 i sprzętu ATI X1400 po pierwszym podłączeniu wyświetlacza VGA dostaję zdarzenie, ale żadnych zdarzeń po kolejnych rozłączeniach lub ponownych połączeniach wyświetlacza. Sprzęt Intel może mieć lepszą obsługę. Zastrzeżony sterownik NVIDIA obecnie nie obsługuje KMS; Nie próbowałem szukać zdarzeń hotplug na sprzęcie NVIDIA, ale wątpię, by to zadziałało.
Jeśli chcesz eksperymentować z udev, możesz wykonać następujące czynności:
[drm] radeon kernel modesetting enabled
i[drm] initializing kernel modesetting
udevadm monitor --property
i sprawdź, czy zdarzenia są zgłaszane, gdy (dis-) connect wyświetlaJeśli otrzymujesz zdarzenia udev podczas wyświetlania hotplug, możesz uruchomić skrypt za pomocą reguły udev, takiej jak:
Uwaga: To nie zadziała, jeśli używasz procesora graficznego nVIDIA z zastrzeżonym sterownikiem binarnym, ponieważ nie używa on KMS. Będziesz nie dostać żadnych wydarzeń udev.
źródło
Jeśli chodzi o narzędzie, które może przechowywać profile konfiguracji monitorów dla poszczególnych użytkowników i wyświetlaczy, autorandr zrobi to dokładnie. https://github.com/wertarbyte/autorandr .
Mój laptop ma kartę NVIDIA, więc zamiast xrandr używam zaplecza dispera: http://willem.engen.nl/projects/disper/ . Autorandr użyje disper jako backendu do zarządzania monitorami, jeśli nazwiesz go as
autodisper
. Jednak w dalszej części tego postu będę się nazywaćautorandr
spójnością.Możesz zapisać profile za pomocą
autorandr --save profile_name
. Uruchomionyautorandr
przez siebie wtedy daje listę profili, a także określić, który z nich jest wykrywany jako bieżącej konfiguracji.Na przykład:
Możesz nakazać mu automatyczne ładowanie profilu odpowiedniego dla bieżącej konfiguracji za pomocą
autorandr --change
. To polecenie, w połączeniu z regułą udev, aby uruchomić ją, gdy jest podłączona podczas pracy, wykona to, o co prosisz.Jako dodatkowe zabezpieczenie dołączyłem
--default laptop
do tego polecenia, które sprawi, że będzie ono domyślnie wyświetlane na ekranie laptopa, jeśli nie ma zapisanego profilu pasującego do bieżącej konfiguracji. Zatem pełne polecenie, którego używam do przełączania wyświetlaczy to:Niestety, moja maszyna nie daje żadnego wyjścia udev, kiedy podłączam monitor do sieci. Używam zastrzeżonych sterowników NVIDIA, więc nie jest to zaskakujące. Na razie związałem go z klawiszem XF68Display (Fn-F8), który jest prawie tak samo dobry.
źródło
udev
autorandr
: github.com/phillipberndt/autorandrUżyłem sugerowanej powyżej reguły udev wraz ze skryptem powłoki, który wygląda
Część Xauthority jest niezbędna, podobnie jak eksport
DISPLAY
, możesz użyć echa,$DISPLAY
aby zobaczyć, która liczba jest równa. Służyxrandr -q
do wyświetlania posiadanych monitorów zewnętrznych. Ostatnim stwierdzeniem jest upewnienie się, że nigdy nie utkniesz bez wyświetlacza.źródło
Mały program, który czeka na powiadomienie serwera X o zmianie konfiguracji monitora, a następnie wykonuje dane polecenie (np.
autorandr
Wspomniane w innej odpowiedzi) jest dostępny pod adresem : https://bitbucket.org/portix/srandrd/overviewTo wydaje się być czystszym rozwiązaniem, które przy użyciu
udev
(gdzie trzeba się martwić o znalezienie odpowiedniego serwera X itp.)źródło
Jeśli musisz go automatycznie wykrywać po podłączeniu, wydaje się, że najczystszym rozwiązaniem jest dodanie reguły UDEV w celu uruchomienia skryptu zawierającego polecenia xrandr. Oto przykład rozwiązania jednego użytkownika 1 :
Monitoruj (wyjściowe) zdarzenia UDEV za pomocą
udevadm
Ten krok będzie najważniejszy dla każdego użytkownika. Uruchom
udevadm monitor --environment --udev
. Następnie podłącz kabel HDMI.Reguła UDEV
Na podstawie danych wyjściowych powyższego polecenia użytkownik utworzył tę regułę UDEV pod adresem
/etc/udev/rules.d/95-monitor-hotplug.rules
.Zwróć uwagę na używane zmienne środowiskowe, aby xrandr był uruchamiany w profilu użytkownika.
skrypt xrandr hotplug_monitor.sh
Możesz dostosować opcje xrandr do swoich potrzeb.
źródło
Dla tych, którzy z jakiegokolwiek powodu nie chcą wybrać trasy hotplug, nadal można nie odpytywać w skrypcie za pomocą inotifywait:
Sondowanie za pomocą xrandr spowodowało poważne problemy z użytecznością na moim nowym laptopie (mysz od czasu do czasu przestała działać).
źródło
Korzystając z rozwiązania peoro, otrzymałem dodatkowe wyjście z xrandr, więc użyłem opcji -c dla grep, która liczy liczbę dopasowań. Dostosowałem go do HDMI i dodałem również przełącznik audio:
źródło
Sądzę, że ludzie, którzy patrzą na to pytanie, nie są tymi, którzy chcą używać GNOME, a ci, którzy używają GNOME, nie musieliby patrzeć na to pytanie, ale w interesie kompletności:
GNOME ma tę wbudowaną funkcjonalność. Jeśli zmienisz konfigurację za pomocą gnome-control-centre, gnome-settings-daemon zapamięta ją (wejdzie
.config/monitors.xml
) i automatycznie zastosuje, gdy monitor zostanie podłączony lub odłączony.Niestety konfiguracja w pliku monitors.xml nie jest dobrze udokumentowana. Zobacz pytanie tutaj . Narzędzia wyświetlania gnomów również nie mają możliwości ustawiania przesuwania, skalowania dla monitora i nie pomniejszają. Ponieważ wiele osób korzysta z ekranu laptopa HiDPI wraz ze zwykłym ekranem DPI, narzędzia nie wystarczą, aby uzyskać praktyczne rozwiązanie.
Widziałem to jako element mapy drogowej dla Waylanda, więc kiedy wreszcie nadejdzie, możemy zobaczyć rozwiązanie wspomnianych problemów. Do tego czasu na Gnome po prostu uruchamiam skrypt startowy z opóźnieniem, aby ręcznie skonfigurować xrandr.
źródło
Aby uprościć na przykład w Xfce, zainstaluj „arandr”, który powinien być dostępny w twoich pakietach dystrybucyjnych. Skonfiguruj wyświetlacz za pomocą „arandr”, a następnie zapisz go jako na przykład „displayLayout”. Arandr powinien dodać dla ciebie rozszerzenie „.sh”, aby można go było używać bezpośrednio w „function connect ()”, jak napisano w skrypcie „hotplug_monitor.sh” wspomnianym powyżej przez iyrin, na przykład:
Aby użyć mechanizmu rozłączania, dodaj na górze skryptu tuż pod „#! / Bin / bash” w następujący sposób:
xrandr wykryje wyświetlanie i przekaże dane wyjściowe do awk, który przefiltruje je na podstawie wyrażenia regularnego „połączony”, po którym następuje cyfra, która w gruncie rzeczy jest tym, czego chcemy. Moim zdaniem dopasowanie dokładnej rozdzielczości w wyrażeniu regularnym nie jest konieczne, ponieważ wyświetlanie pierwotne jest zgłaszane jako „podłączony pierwotny”, po którym następuje liczba, tj. Rozdzielczość. Następnie awk „print $ 1” wypisze tylko pierwszą kolumnę, która w tym przypadku jest nazwą monitora zewnętrznego i będzie przechowywana w zmiennej PLUGGED_EXTERNAL. Następnie zamiast stałej nazwy wyświetlanej „HDMI1” w skrypcie $ PLUGGED_EXTERNAL można użyć:
źródło
Edycja mojej odpowiedzi, aby ułatwić konfigurację.
Zainstaluj autorandr, aby zautomatyzować układ ekranu w xrandr, pobierz najnowszy plik .deb z https://github.com/nalipaz/autorandr/releases i uruchom:
Skonfiguruj autorandr z zapisanymi układami ekranu
Na przykład na moim laptopie bez podłączonych monitorów konfiguruję i konfiguruję tak, jak chcę, a następnie uruchamiam:
Następnie podłączyłem mój hdmi i ponownie skonfigurowałem arandr, a następnie uruchomiłem:
Po skonfigurowaniu każdego z układów możesz uruchomić (zamień „mobile” na poprzednią ulubioną nazwę, użyłem mobile):
Teraz, gdy autorandr jest już skonfigurowany, możesz zautomatyzować proces, instalując pakiet, który będzie sprawdzał podłączone wyświetlacze i uruchamiał się
autorandr --change
po wykryciu. Tak, wiem o udev i możesz to ustawić, jeśli działa dla ciebie, ale w moich testach udev nie działał konsekwentnie dla mojego hdmi. Działa tylko 1 na każde 20 wtyczek / odłączników i czasami po prostu całkowicie przestaje działać.Pobierz najnowszą wersję .deb tutaj: https://github.com/nalipaz/poll-xrandr/releases/, a następnie zainstaluj za pomocą
Najprawdopodobniej konieczne jest uruchomienie większej liczby zadań po zakończeniu
autorandr --change
, autorandr umożliwia wstawienie tych poleceń do pliku o nazwie ~ / .autorandr / postswitch. Wykonaj następujące czynności:Teraz edytuj plik postswitch, aby uzyskać coś podobnego do następującego:
Ponadto prawdopodobnie będziesz chciał dodać autorandr i poll-xrandr do swoich startupów, coś w rodzaju dwóch następujących poleceń:
Odłącz lub podłącz monitor i obserwuj magię!
źródło