Apakah ada lingkungan desktop ramah multi-monitor yang dinamis yang tersedia untuk Ubuntu?

14

Saya menggunakan laptop dan suka bermigrasi di siang hari dari satu (fisik) tempat kerja ke yang lain dan terhubung ke monitor eksternal jika tersedia.

Saya juga harus melakukan banyak tugas, jadi saya memiliki banyak jendela yang terbuka pada waktu tertentu dan banyak ruang kerja (virtual) untuk mengaturnya.

Tetapi setiap kali saya menghubungkan / melepas monitor eksternal, semua pengaturan saya yang hati-hati hilang. Ini membuat saya benar-benar marah .

Apakah ada lingkungan desktop yang hanya membiarkan windows saja ketika Anda menghubungkan / melepaskan monitor kedua? Atau bahkan lebih baik, yang mengingat pengaturan jendela per pengaturan monitor? Sehingga ketika saya pergi dari kantor saya di rumah (monitor 17 "di atas layar laptop) ke tempat kerja saya yang biasa (monitor 21" di sebelah kiri layar laptop) atau meja rekan kerja saya (monitor 19 "di sebelah kanan layar latop), windows berakhir di tempat mereka terakhir kali monitor terhubung - atau tetap diam jika mereka tidak pernah melihat monitor ini.

Cara persatuan "menangani" monitor eksternal hanya membuat saya sedih dan berharap saya tidak memiliki semua monitor tambahan untuk dihubungkan dan begitu saya menghubungkannya membuat saya terikat pada pengaturan ini, seolah-olah saya memiliki mesin desktop yang dipaku ke lantai.

artm
sumber
Apakah ini terjadi pada window manager? GNOME 3, KDE, LXDE, XFCE?
Braiam
Saya tidak tahu Itu terjadi dengan persatuan.
artm
Sudahkah Anda menemukan solusi yang bagus untuk ini? Saya telah dipaksa untuk menggunakan laptop Dell yang telah saya gunakan ubuntu, tetapi saya sudah terbiasa dengan MacBook Pro saya. Di Mac ada program bernama Stay, yang sangat diperlukan, karena ia mengingat lokasi jendela untuk setiap konfigurasi monitor. Pasang monitor, semua jendela pindah ke tempat mereka berada. Tancapkan monitor kedua, mereka semua bergerak lagi. Cabut, mereka semua kembali ke tempat mereka. Selain itu Mac cukup pintar bahkan tanpa Tetap untuk memastikan semua jendela terlihat. Di laptop Ubuntu ini saya tetap harus menemukan jendela yang tidak terlihat.
Greywire
Saya tidak dapat menemukan apa pun seperti Tetap di linux. Sepertinya Anda bisa mendapatkan semua informasi dan kontrol dari perintah individu, dan skrip di bawah ini menjadi dekat. Saya sedang berupaya meningkatkan ini untuk mendapatkan fungsionalitas yang saya butuhkan ...
Greywire
Tetap terdengar seperti apa yang saya lewatkan. Tidak, saya belum menemukan solusi.
artm

Jawaban:

10

Saya memberi Anda dua skrip shell. Ini akan membantu Anda menyimpan pengaturan posisi dan ukuran windows Anda . Jika entah bagaimana pengaturan windows yang Anda inginkan terganggu, Anda akan dapat mengembalikan pengaturan tersebut dengan ukuran dan posisi windows yang tepat untuk semua windows menggunakan skrip ini.

Anda perlu menginstal wmctrlkecuali Anda sudah memilikinya. Instal melalui terminal,

sudo apt-get install wmctrl

Script untuk menyimpan konfigurasi 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

Pada pelaksanaan skrip di atas akan menyimpan posisi dan ukuran windows Anda untuk semua jendela yang terbuka ke file bernama .my_windows_config.txtdi direktori home Anda. Ini adalah file teks tersembunyi.

Script untuk memuat ulang konfigurasi 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

Ketika Anda menjalankan skrip kedua itu akan mengembalikan posisi windows Anda dengan ukuran yang tepat untuk semua windows Anda.

Pemakaian

Simpan skrip ini di $HOME/bin/direktori Anda . Tambahkan $HOME/bin/di PATH. Untuk ini tambahkan baris ini di akhir halaman Anda$HOME/.bashrc

PATH=$HOME/bin:$PATH
export PATH

Ini akan memungkinkan Anda menjalankan skrip tersebut dengan nama mereka saja. Berikan izin eksekusi skrip,

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

Untuk menyimpan konfigurasi di $HOME/.my_windows_config.txt

Setelah Anda membuka dan menyesuaikan semua windows Anda berjalan di terminal,

save_window_conf.sh

Untuk memuat ulang konfigurasi dari $HOME/.my_windows_config.txt

load_window_conf.sh

Semoga ini akan menyelesaikan masalah Anda. Ini adalah tangkapan layar,

masukkan deskripsi gambar di sini

souravc
sumber
Wow, terima kasih, ini terlihat menjanjikan. Saya akan mencoba skrip.
artm
@artm Saya telah mengedit sedikit kesalahan dan kesalahan ketik, sekarang sepertinya ok. Saya mengujinya pada sesi Unity dan Gnome-fallback, seharusnya bisa digunakan di gnome3. Beri tahu saya jika Anda menghadapi masalah apa pun.
souravc
@artm, itu harus menjadi keputusan Anda saat Anda ingin menghapus .my_windows_config.txt. Jika Anda ingin memuat konfigurasi windows yang sama beberapa kali untuk windows yang ada, Anda mungkin ingin melestarikannya. Tetapi jika Anda memulai seluruh sesi baru, id windows akan berbeda dan dalam hal ini lebih baik untuk menghapus file konfigurasi lama $HOME/.my_windows_config.txt. Anda perlu menghapus file konfigurasi yang disimpan secara manual sebelum menyimpan konfigurasi baru.
souravc
Pada XFCE4 di Ubuntu 18.04 saya harus mengubah gravitasi (pertama "0" pada parameter -e) menjadi 31, jika tidak windows dikembalikan sekitar 31px ke kanan dan ke bawah di mana mereka berada. Saya pikir itu mungkin ukuran panel XFCE default. Terima kasih untuk kodenya!
akom
-1

Panduan umum ada di sini: Resolusi

Solusi Anda tentang resolusi dinamis dekat dengan Xorg & XrandR atau Xinerama

Anda memiliki:
Empat metode untuk pengaturan

  1. Sesi dengan .xprofile.

  2. Secara dinamis dengan menggunakan alat xrandr

  3. Secara statis dengan mengatur di xorg.conf.

  4. GUI Front End Grafis Xrandr.

Jawaban yang bagus adalah Pengaturan untuk beberapa monitor tidak disimpan

Untuk mengatasi Manajemen Window Anda di seluruh ruang kerja Anda, Anda dapat menggunakan sistem profil yang diberikan oleh Compiz Config Manager

cepat
sumber
2
Saya tidak punya masalah dengan resolusi atau pengaturan tampilan - itu berfungsi seperti yang diharapkan.
artm
Jadi lingkungan desktop APAPUN yang RAMAH untuk Anda. Tolong, jangan menyalahkan publik.
cepat
Saya tidak menyalahkan siapa pun. Saya hanya ingin membuka windows agar tetap di tempat saya meletakkannya saat menghubungkan / melepas monitor.
artm
Jadi, Anda memiliki empat solusi dengan referensi resmi. Jawaban saya cukup untuk menutupi "kegilaan" Anda;)
cepat
2
Oh, coba saja sendiri: buka jendela di setiap ruang kerja lalu sambungkan monitor yang muncul ke bagian atas layar asli dan lihat di mana jendela Anda berakhir. Lalu katakan padaku bagaimana xrandr relevan untuk menghentikan windows agar tidak melompat secara acak ketika monitor terhubung.
artm