มีสภาพแวดล้อมเดสก์ท็อปที่เป็นมิตรกับจอภาพหลายจอพร้อมใช้งานสำหรับ Ubuntu หรือไม่


14

ฉันใช้แล็ปท็อปและต้องการย้ายระหว่างวันจากที่ทำงาน (สถานที่จริง) ไปยังที่อื่นและเชื่อมต่อกับจอภาพภายนอกหากมี

ฉันต้องทำงานหลายอย่างด้วยกันดังนั้นฉันจึงมีหน้าต่างจำนวนมากที่เปิดในเวลาใดก็ตามและพื้นที่ทำงาน (เสมือน) จำนวนมากเพื่อจัดระเบียบหน้าต่างเหล่านั้น

แต่ทุกครั้งที่ฉันเชื่อมต่อ / ยกเลิกการเชื่อมต่อจอภาพภายนอกการจัดการที่รอบคอบของฉันก็หมดไป นี้ทำให้ฉันบ้าจริงๆ

มีสภาพแวดล้อมเดสก์ท็อปที่ทิ้งหน้าต่างไว้คนเดียวเมื่อคุณเชื่อมต่อ / ยกเลิกการเชื่อมต่อจอภาพที่สองหรือไม่? หรือดียิ่งขึ้นที่จำการจัดเรียงหน้าต่างต่อการจัดเรียงจอภาพ? ดังนั้นเมื่อฉันไปจากสำนักงานที่บ้านของฉัน (จอมอนิเตอร์ 17 "ที่ด้านบนของหน้าจอแล็ปท็อป) ไปยังที่ทำงานปกติของฉัน (จอมอนิเตอร์ 21" ด้านซ้ายของหน้าจอแล็ปท็อป) หรือโต๊ะทำงานของเพื่อนร่วมงาน หน้าต่างสิ้นสุดที่พวกเขาเป็นครั้งสุดท้ายที่เชื่อมต่อจอภาพ - หรืออยู่ต่อไปถ้าพวกเขาไม่เคยเห็นจอภาพนี้

วิธีที่ความสามัคคี "จัดการ" จอภาพภายนอกทำให้ฉันเศร้าและหวังว่าฉันจะไม่ได้มีจอภาพพิเศษทั้งหมดที่จะเชื่อมต่อและเมื่อฉันเชื่อมต่อมันทำให้ฉันถูกล่ามโซ่กับข้อตกลงนี้ราวกับว่าฉันมีเครื่องตั้งโต๊ะติดอยู่กับพื้น


สิ่งนี้เกิดขึ้นกับตัวจัดการหน้าต่างหรือไม่? GNOME 3, KDE, LXDE, XFCE?
Braiam

ฉันไม่รู้ มันเกิดขึ้นด้วยความสามัคคี
artm

คุณพบทางออกที่ดีสำหรับสิ่งนี้หรือไม่? ฉันถูกบังคับให้ใช้แล็ปท็อป Dell ซึ่งฉันใส่อูบุนตูแล้ว แต่ฉันคุ้นเคยกับ MacBook Pro ของฉัน บน Mac มีโปรแกรมชื่อ Stay ซึ่งขาดไม่ได้เพราะจะจำตำแหน่งหน้าต่างสำหรับการกำหนดค่าจอภาพแต่ละรายการ เสียบจอภาพทุกหน้าต่างจะเลื่อนไปยังตำแหน่งที่เคยอยู่ เสียบจอภาพที่สองพวกเขาทั้งหมดย้ายอีกครั้ง ถอดปลั๊กพวกเขาทั้งหมดกลับไปยังที่ที่พวกเขาอยู่ นอกจากนี้ Mac ยังฉลาดพอแม้ไม่อยู่เพื่อให้แน่ใจว่าสามารถมองเห็นหน้าต่างทั้งหมดได้ ในแล็ปท็อป Ubuntu ตัวนี้ฉันต้องหา windows ที่อยู่นอกจอ
Greywire

ฉันไม่สามารถหาอะไรได้เหมือนอยู่บน linux ดูเหมือนว่าคุณจะได้รับข้อมูลและการควบคุมทั้งหมดจากคำสั่งส่วนบุคคลและสคริปต์ด้านล่างเข้ามาใกล้ ฉันกำลังทำงานในการปรับปรุงเหล่านี้จะได้รับการทำงานที่ผมจำเป็นต้อง ...
Greywire

คอยฟังเหมือนสิ่งที่ฉันคิดถึง ไม่ฉันไม่พบวิธีแก้ไข
artm

คำตอบ:


10

ฉันกำลังให้คุณสองเชลล์สคริปต์ มันจะช่วยให้คุณบันทึกการจัดวางของหน้าต่างตำแหน่งและขนาด หากการจัดเรียงหน้าต่างที่คุณต้องการถูกรบกวนคุณจะสามารถกู้คืนการจัดเรียงเหล่านั้นด้วยขนาดและตำแหน่งหน้าต่างที่แน่นอนสำหรับหน้าต่างทั้งหมดที่ใช้สคริปต์เหล่านี้

คุณต้องติดตั้งwmctrlเว้นแต่คุณจะมีมัน ติดตั้งผ่านเทอร์มินัล

sudo apt-get install wmctrl

สคริปต์เพื่อบันทึกการกำหนดค่า windows

# Script_Name: save_window_conf.sh
#!/bin/bash
if [ -f $HOME/.my_windows_config.txt ]; then
    echo -e "Information: Previous configuration file \"$HOME/.my_windows_config.txt\" already exists.\nTo save a new configuration remove it manually using the following command,\n\n\trm $HOME/.my_windows_config.txt"
    exit 1
else
    wmctrl -p -G -l | awk '($2 != -1)&&($3 != 0)&&($NF != "Desktop")' | awk '{print $1}' | while read mywinid
    do
        xwininfo -id "$mywinid" >> $HOME/.my_windows_config.txt
    done
fi

เมื่อทำงานสคริปต์ข้างต้นจะบันทึกตำแหน่งและขนาดหน้าต่างของคุณสำหรับหน้าต่างที่เปิดอยู่ทั้งหมดของคุณไปยังไฟล์ที่มีชื่อ.my_windows_config.txtอยู่ในไดเรกทอรีบ้านของคุณ มันเป็นไฟล์ข้อความที่ซ่อนอยู่

สคริปต์เพื่อโหลดการกำหนดค่า windows

# Script_Name: load_window_conf.sh
#!/bin/bash

file=$HOME/.my_windows_config.txt
declare -a mywinid
declare -a x
declare -a y
declare -a width
declare -a height

nl=$(cat "$file" | grep xwininfo |wc -l)

for i in $(seq 1 $nl)
do
    mywinid[i]=$(cat "$file" | grep "xwininfo" | awk -v p="$i" '{if(NR==p) print $4}')
    x[i]=$(cat "$file" | grep "Absolute upper-left X" | awk -v p="$i" '{if(NR==p) print $NF}')
    y[i]=$(cat "$file" | grep "Absolute upper-left Y" | awk -v p="$i" '{if(NR==p) print $NF}')
    width[i]=$(cat "$file" | grep "Width" | awk -v p="$i" '{if(NR==p) print $NF}')
    height[i]=$(cat "$file" | grep "Height" | awk -v p="$i" '{if(NR==p) print $NF}')
done

for it in $(seq 1 $nl)
do
    wmctrl -i -r "${mywinid[$it]}" -e 0,"${x[$it]}","${y[$it]}","${width[it]}","${height[it]}"
done

เมื่อคุณรันสคริปต์ที่สองมันจะคืนค่าตำแหน่งหน้าต่างของคุณด้วยขนาดที่แน่นอนสำหรับหน้าต่างทั้งหมดของคุณ

การใช้

บันทึกสคริปต์เหล่านี้ใน$HOME/bin/ไดเรกทอรีของคุณ เพิ่มในของคุณ$HOME/bin/ PATHสำหรับการเพิ่มบรรทัดเหล่านี้ในตอนท้ายของคุณ$HOME/.bashrc

PATH=$HOME/bin:$PATH
export PATH

มันจะช่วยให้คุณสามารถรันสคริปต์เหล่านั้นด้วยชื่อของพวกเขาเท่านั้น ให้สิทธิ์ดำเนินการกับสคริปต์

chmod +x $HOME/bin/save_window_conf.sh
chmod +x $HOME/bin/load_window_conf.sh

เพื่อบันทึกการกำหนดค่าในของคุณ $HOME/.my_windows_config.txt

หลังจากคุณเปิดและปรับหน้าต่างทั้งหมดของคุณทำงานในเทอร์มินัล

save_window_conf.sh

เพื่อโหลดการกำหนดค่าจากของคุณ $HOME/.my_windows_config.txt

load_window_conf.sh

หวังว่ามันจะแก้ปัญหาของคุณ นี่คือภาพหน้าจอ

ป้อนคำอธิบายรูปภาพที่นี่


ว้าวขอบคุณสิ่งนี้ดูมีแนวโน้ม ฉันจะลองใช้สคริปต์
artm

@artm ฉันได้แก้ไขข้อผิดพลาดเล็กน้อยและพิมพ์ผิดตอนนี้ดูเหมือนว่าตกลง ฉันทดสอบกับ Unity และ Gnome-fallback-session ควรใช้กับ gnome3 แจ้งให้เราทราบหากคุณประสบปัญหาใด ๆ
souravc

@artm .my_windows_config.txtมันควรจะเป็นการตัดสินใจของคุณเมื่อคุณต้องการที่จะลบ หากคุณต้องการโหลดการกำหนดค่า windows เดียวกันหลายครั้งสำหรับหน้าต่างที่มีอยู่คุณอาจต้องการเก็บรักษาไว้ แต่ถ้าคุณเริ่มเซสชันใหม่ทั้งหมดหน้าต่างผู้ ID $HOME/.my_windows_config.txtจะแตกต่างกันและในกรณีที่มันจะดีกว่าที่จะลบไฟล์การกำหนดค่าเก่า คุณต้องทำการลบไฟล์ที่บันทึกการกำหนดค่าด้วยตนเองก่อนที่จะบันทึกการกำหนดค่าใหม่
souravc

ใน XFCE4 ใน Ubuntu 18.04 ฉันต้องเปลี่ยนแรงโน้มถ่วง (แรก "0" ในพารามิเตอร์ -e) ถึง 31 มิฉะนั้นหน้าต่างได้รับการเรียกคืนประมาณ 31px ถูกต้องและลงที่พวกเขาอยู่ ฉันคิดว่าอาจเป็นขนาดของพาเนล XFCE เริ่มต้น ขอบคุณสำหรับรหัส!
akom

-1

คู่มือทั่วไปอยู่ที่นี่: การแก้ไข

โซลูชันของคุณเกี่ยวกับความละเอียดแบบไดนามิกอยู่ใกล้กับXorg & XrandRหรือXinerama

คุณมี:
สี่วิธีในการตั้งค่า

  1. ตามเซสชั่นด้วย. xprofile

  2. แบบไดนามิกโดยใช้เครื่องมือ xrandr

  3. แบบคงที่โดยการตั้งค่าใน xorg.conf

  4. GUI ปลายด้านหน้า Xrandr แบบกราฟิก

คำตอบที่ดีคือการตั้งค่าสำหรับจอภาพหลายจอไม่ได้ถูกจัดเก็บ

ในการแก้ปัญหาการจัดการหน้าต่างในพื้นที่ทำงานของคุณคุณสามารถใช้ระบบการทำโปรไฟล์ที่กำหนดโดยCompiz Config Manager


2
ฉันไม่ได้มีปัญหากับการแก้ปัญหาหรือการจัดเรียงจอแสดงผล - ทำงานตามที่คาดไว้
artm

ดังนั้นสภาพแวดล้อมเดสก์ทอปใด ๆ ที่เป็นมิตรสำหรับคุณ โปรดอย่าตำหนิสาธารณะ
รวดเร็ว

ฉันไม่โทษใครเลย ฉันแค่ต้องการเปิดหน้าต่างให้อยู่ตรงที่ฉันวางไว้เมื่อเชื่อมต่อ / ตัดการเชื่อมต่อจอภาพ
artm

ดังนั้นคุณมีสี่โซลูชั่นที่มีการอ้างอิงอย่างเป็นทางการ คำตอบของฉันครอบคลุมเพียงพอ "madness" ของคุณ;)
รวดเร็ว

2
โอ้ลองด้วยตัวคุณเอง: เปิดหน้าต่างในแต่ละพื้นที่ทำงานจากนั้นเชื่อมต่อจอภาพที่ปรากฏขึ้นที่ด้านบนของหน้าจอเดิมและดูว่าหน้าต่างของคุณอยู่ที่ไหน จากนั้นบอกฉันว่า xrandr เกี่ยวข้องกับการหยุดหน้าต่างจากการกระโดดแบบสุ่มเมื่อเชื่อมต่อจอภาพอย่างไร
artm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.