כוונו את המסכים עם xrandr פעם אחת ולא תפתחו את חלון התצוגה שוב לעולם
לכל סביבת שולחן עבודה יש חלון הגדרות תצוגה, ולכל אחד מהם יש את אותו כישלון: הוא שוכח. אתם מחברים את המחשב הנייד למקרן, החלון מנחש לא נכון, אתם מתקנים ביד, מנתקים, ובשבוע הבא עושים את כל זה שוב. הפריסה שאתם רוצים זהה בכל פעם. הכלי שמכוון אותה צריך להיות פקודה, לא שיחה.
כל מה שהחלון עושה, xrandr עושה מהמעטפת, ופקודה אפשר לשמור. הנה די ממנה כדי להפסיק לגעת בחלון.
לראות מה יש לכם
xrandr --query
הפלט מציג כל יציאה שכרטיס הגרפיקה מכיר, אם משהו מחובר אליה, ואת המצבים שכל מסך מחובר תומך בהם, כשהנוכחי מסומן בכוכבית והמועדף בסימן פלוס. מחשב נייד טיפוסי מציג משהו כמו:
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
1366x768 60.0*+
1024x768 60.0
VGA1 connected 1920x1080+1366+0 (normal left inverted right x axis y axis) 510mm x 287mm
1920x1080 60.0*+
1280x1024 60.0
HDMI1 disconnected (normal left inverted right x axis y axis)
השמות בצד שמאל (LVDS1, VGA1, HDMI1) הם מה שכל פקודה אחרת מתייחסת אליו. הם יציבים עבור מכונה
נתונה, וזה מה שמאפשר תסריט שמור.
לקבוע מצב
לקבוע ליציאה אחת רזולוציה מסוימת:
xrandr --output VGA1 --mode 1920x1080
לתת לה לבחור את המצב שהצג מדווח עליו כמועדף, שהוא כמעט תמיד הנכון:
xrandr --output VGA1 --auto
לכבות יציאה, שזה מה שאתם רוצים עבור לוח המחשב הנייד כשהמכסה סגור:
xrandr --output LVDS1 --offלסדר אותם
המיקום הוא יחסי ליציאה אחרת:
xrandr --output VGA1 --auto --right-of LVDS1
החלופות הן --left-of, --above ו---below. להרצאה אתם רוצים בדרך כלל שהמקרן ישקף את המחשב הנייד
במקום זאת:
xrandr --output VGA1 --auto --same-as LVDS1
שיקוף עובד נקי רק כששני המסכים רצים באותו מצב, אז אולי כדאי לכפות מצב משותף עם --mode על שניהם.
וכשצג מותקן הפוך:
xrandr --output VGA1 --rotate left
כל אלה משתלבים לפקודה אחת, ופקודה אחת טובה מכמה מפני ששרת ה-X משנה את תצורתו פעם אחת במקום להבהב דרך מצבי ביניים:
xrandr --output LVDS1 --auto --output VGA1 --auto --right-of LVDS1 --output HDMI1 --offלשמור את הפריסות שאתם משתמשים בהן
עכשיו הטעם בכל התרגיל. שימו את הפריסות שאתם באמת משתמשים בהן בתסריט, פונקציה אחת לכל מצב:
#!/bin/bash
# screens.sh - set a known display layout
set -e
home() {
xrandr --output LVDS1 --auto \
--output VGA1 --auto --right-of LVDS1 \
--output HDMI1 --off
}
laptop() {
xrandr --output LVDS1 --auto \
--output VGA1 --off \
--output HDMI1 --off
}
projector() {
xrandr --output LVDS1 --mode 1024x768 \
--output VGA1 --mode 1024x768 --same-as LVDS1
}
case "$1" in
home|laptop|projector) "$1" ;;
*) echo "usage: $0 home|laptop|projector" >&2; exit 1 ;;
esac
הפכו אותו לבר-הרצה ושימו אותו בנתיב שלכם. מכאן ואילך כל הטקס הוא:
screens.sh projector
קשרו את המקרים הנפוצים למקשים במנהל החלונות שלכם ולא תצטרכו גם את המסוף.
למה לא לתת לשולחן העבודה לטפל בזה
מפני שהוא אינו יכול לדעת מה אתם רוצים. סביבת שולחן עבודה רואה צג חדש וצריכה לנחש: לשקף או להרחיב, באיזה צד, באיזו רזולוציה. הניחוש שלה הוא ברירת מחדל, וברירות מחדל הן לאנשים שלא החליטו. אתם החלטתם. יש לכם שלוש או ארבע פריסות ואתם יודעים איזו אתם רוצים ממבט בחדר.
החלטה שכבר החלטתם צריכה להיות פקודה אחת, ופקודה היא משהו שאפשר לתת לו שם, לאחסן, לנהל בגרסאות ולקשור למקש. החלון אינו מציע דבר מזה. הוא מציע ניחוש חדש בכל פעם, ומבקש מכם לתקן אותו עם העכבר.
התסריט למעלה הוא כעשרים שורות. הוא חסך לי יותר דקות מכל דבר אחר בגודלו.