Ubuntu 14.10และใหม่กว่า: มันง่ายกว่านั้นมาก โปรดดูคำตอบนี้และความคิดเห็นของฉันด้านล่าง
หมายเหตุ : ใช้งานได้กับ Ubuntu 13.04 เท่านั้น มีความแตกต่างใน 13.10
ฉันได้เชื่อมต่อจอภาพภายนอกสองจอ (นอกเหนือจากแผงในตัว) เข้ากับ ThinkPad T430 ของฉันบน Ubuntu 13.04 โดยเปิดใช้งาน Optimus ("กราฟิกสลับได้") (ตัวเลือก 3 ในรายการของคุณ) จอภาพเชื่อมต่อผ่านอินเตอร์เฟส DVI ซึ่งหนึ่งในนั้นหมุนได้ ตรงกันข้ามกับโซลูชันอื่น ๆ จอภาพทั้งหมดเชื่อมต่อกับตัวจัดการหน้าต่างเดียวกันดังนั้นหน้าต่างสามารถเคลื่อนย้ายได้อย่างอิสระระหว่างจอภาพ สิ่งนี้จะบรรลุเป้าหมายของอายุการใช้งานแบตเตอรี่ที่เพิ่มขึ้นหากยกเลิกการเชื่อมต่อและใช้จอภาพภายนอกหากเชื่อมต่อ
แนวคิดหลักที่นี่คือ:
- อะแดปเตอร์กราฟิกภายในรับผิดชอบการจัดการรูปภาพ (บิตแมป) ที่แสดงขึ้นจริง
- โดยค่าเริ่มต้นทุกอย่างจะแสดงผลในอะแดปเตอร์กราฟิกภายใน
- แอปพลิเคชันที่เร่งความเร็ว GPU ใช้อะแดปเตอร์กราฟิกแบบแยกส่วนเอาต์พุตจะถูกคัดลอกไปยังการ์ดกราฟิกภายใน
- สำหรับจอภาพภายนอกแต่ละตัวอะแดปเตอร์กราฟิกภายในให้การแสดงผล "เสมือน"
- เอาต์พุตไปยังจอภาพภายนอกเกิดขึ้นโดยใช้เซิร์ฟเวอร์ X ที่สองเนื้อหาจากการแสดง "เสมือน" จะถูกคัดลอกไปยังเซิร์ฟเวอร์ X ที่สองอย่างต่อเนื่อง
ประโยชน์หลักๆ ของโซลูชันอื่น ๆ คือจอแสดงผลทั้งหมดเป็นส่วนหนึ่งของเซสชัน X เดียวกันดังนั้นคุณจึงสามารถย้ายหน้าต่างระหว่างจอแสดงผลได้อย่างอิสระ
จนถึงตอนนี้ฉันสังเกตเห็นว่าไม่มีการลงโทษในเรื่องประสิทธิภาพ
คำแนะนำ
คุณต้องทำสิ่งต่อไปนี้:
- ติดตั้ง Bumblebee จาก PPA
- สร้างและติดตั้งไดรเวอร์วิดีโอ Intel ที่กำหนดเอง
- ดาวน์โหลดรวบรวมและติดตั้งโปรแกรมขนาดเล็กในที่สุด
- แก้ไขสองไฟล์การกำหนดค่า
- รีบูตหลายครั้ง
สำหรับการกระทำส่วนใหญ่คุณจะต้องใช้เทอร์มินัลโปรแกรมแก้ไขข้อความและการเข้าถึงรูท ( sudo
) คำแนะนำโดยละเอียดได้รับด้านล่าง
ติดตั้ง Bumblebee
ติดตามส่วน "การตั้งค่าพื้นฐาน" ของคำแนะนำ ดำเนินการในฐานะ root คำสั่งสุดท้ายเริ่มต้นการรีบูตจริง:
add-apt-repository ppa:bumblebee/stable
apt-get update
apt-get install bumblebee virtualgl linux-headers-generic
reboot
อย่าพยายามใช้ bumblebee กับไดรเวอร์นูโวเท่านั้นหรือ . จากประสบการณ์ของฉันมันไม่ทำงานอย่างน้อยก็ไม่ได้อยู่ในการตั้งค่านี้
การตรวจสอบ
optirun glxgears
คุณควรจะสามารถที่จะเรียกใช้
ติดตั้งรุ่นที่ได้รับการติดตั้งแล้ว xserver-xorg-video-intel
ตัวเลือก 1: ติดตั้งจาก PPA ของฉัน (ปัจจุบันเป็น Ubuntu 13.04 เท่านั้น)
ดำเนินการต่อไปนี้เป็น root:
add-apt-repository ppa:krlmlr/ppa
apt-get update
apt-get install xserver-xorg-video-intel
ตัวเลือก 2: สร้างและติดตั้งแพ็คเกจของคุณเอง
เลือกล่าสุดแพทช์xserver-xorg-video-intel
สำหรับ คลิกไฟล์คลิกปุ่ม "ดิบ" คัดลอก URL ในเบราว์เซอร์ ในขณะที่เขียนนี้เป็นhttps://raw.github.com/liskin/patches/master/hacks/xserver-xorg-video-intel-2.20.14_virtual_crtc.patch
sudo apt-get build-dep xserver-xorg-video-intel
cd ~
apt-get source xserver-xorg-video-intel
cd xserver-xorg-video-intel
# replace the URL below with the one you have noted, if necessary
wget https://raw.github.com/liskin/patches/master/hacks/xserver-xorg-video-intel-2.20.14_virtual_crtc.patch
patch -p1 < *.patch
# The next command will ask for a change log message. Supply something meaningful,
# this will later allow you to distinguish your patched package from the distribution's.
dch -l+virtual
dpkg-buildpackage -b
cd ..
sudo dpkg --install xserver-xorg-video-intel_*.deb
การตรวจสอบ (1) สำหรับตัวเลือกทั้งสอง
คำสั่ง
apt-cache policy xserver-xorg-video-intel
ควรแสดงเวอร์ชันที่ได้รับการ+virtual
ต่อเติม( ต่อท้าย) และเวอร์ชั่น Ubuntu
จำเป็นสำหรับ 13.04 สำหรับตัวเลือกทั้งสอง
เพิ่มสิ่งต่อไปนี้ในของคุณ/etc/X11/xorg.conf
สร้างหากจำเป็น:
Section "Device"
Identifier "intel"
Driver "intel"
Option "AccelMethod" "uxa"
Option "Virtuals" "2"
EndSection
การตรวจสอบ (2) สำหรับทั้งสองตัวเลือก
หลังจากรีบูตให้รันxrandr
ในเทอร์มินัล ผลลัพธ์ควรแสดงรายการจอภาพเสมือนเพิ่มเติมสองรายการ
ดาวน์โหลดและสร้าง screenclone
รับscreenclone ของ puetzkและการอ้างอิงและรวบรวมมัน
sudo apt-get install libxcursor-dev libxdamage-dev libxinerama-dev libxtst-dev git build-essential
cd ~
git clone git://github.com/puetzk/hybrid-screenclone.git
cd hybrid-screenclone
make
การตรวจสอบ
มีไฟล์screenclone
อยู่และสามารถเรียกใช้งานได้ (มันจะยังไม่ทำงาน)
แก้ไข xorg.conf.nvidia
การทดสอบ
การตั้งค่าของฉันถือว่าหน้าจอแนวนอนเชื่อมต่อกับพอร์ต DVI แรกของสถานีติดตั้งและแนวตั้งหนึ่งเชื่อมต่อกับพอร์ต DVI ที่สอง เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลจากไดเรกทอรีที่ screenclone ตั้งอยู่ปรับตามความจำเป็น
xrandr --output LVDS1 --output VIRTUAL1 --mode 1920x1200 --right-of LVDS1 --output VIRTUAL2 --mode 1920x1200 --right-of VIRTUAL1 --rotate left
./screenclone -b -x 1:0 -x 2:1 &
sleep 1
xrandr -d :8 --output DP-2 --right-of DP-1 --rotate left
fg
สังเกตว่าจะต้องกำหนดการหมุนจอแสดงผลสองครั้งอย่างไร คุณสามารถละเว้นการเรียกใช้ครั้งที่สองxrandr
หากไม่ต้องการการหมุน (และแน่นอน--rotate left
ในการร้องขอครั้งแรก)
ด้วยการยกเลิกscreenclone
ด้วย Ctrl + C (ซึ่งถูกนำไปไว้ด้านหน้าเบื้องหน้าอีกครั้งโดยใช้fg
) อะแดปเตอร์กราฟิกแยกจะถูกปิด cat /proc/acpi/bbswitch
คุณสามารถตรวจสอบกับ ยังคงมีการสงวนพื้นที่หน้าจอสำหรับจอภาพที่ไม่ได้เชื่อมต่อทั้งสองตอนนี้ หากต้องการเปลี่ยนกลับเป็นจอแสดงผลแล็ปท็อปเท่านั้นให้ใช้
xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off
ทำความสะอาด
คัดลอกscreenclone
ไปยังไดเรกทอรีที่อยู่ในPATH
(เช่น, /usr/local/bin
)
สร้างbash
สคริปต์เพื่อเริ่มต้นและปิดการแสดงผลภายนอกโดยอัตโนมัติ สคริปต์นี้จะตั้งค่าจอแสดงผลภายนอกเมื่อเริ่มต้นและเปลี่ยนเป็นจอแสดงผลแล็ปท็อปเมื่อออกเท่านั้น (เช่นโดยกดปุ่ม Ctrl + C)
#!/bin/bash
set -m
xrandr --output LVDS1 --output VIRTUAL1 --mode 1920x1200 --right-of LVDS1 --output VIRTUAL2 --mode 1920x1200 --right-of VIRTUAL1 --rotate left
trap "xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off" EXIT
screenclone -b -x 1:0 -x 2:1 &
sleep 1
xrandr -d :8 --output DP-2 --right-of DP-1 --rotate left
fg
ตัวเลือกอื่น: ชุดสะสมสคริปต์ของฉันมีสองสคริปต์extmon-start
และextmon-stop
ที่เปิดใช้งานและปิดใช้งานจอภาพที่สองและสาม แก้ไขextmon-start
สคริปต์เพื่อให้เหมาะกับการกำหนดค่าของคุณ
อ้างอิง
คำตอบของฉันส่วนใหญ่มาจากแหล่งข้อมูลต่อไปนี้: