Saya bertanya-tanya apakah ada cara untuk mencapai pengaruh pintas Ctrl-Alt-Keypad di Unity menggunakan perintah terminal saja? Saya ingin perintah yang menetapkan jendela gui menjadi setengah ukuran layar, baik kiri atau kanan.
Sebagai latar belakang, saya sedang menulis skrip yang berjalan setelah login. Ia menggunakan Zenity untuk menanyakan apakah saya ingin membuka lingkungan pengembangan saya (GVim dan IPython berdampingan). Saya telah mencoba untuk mencapai dua jendela yang sama besar untuk program ini dengan menggunakan set lines= columns=
di saya .gvimrc
dan c.IPythonWidget.width =
dan c.IPythonWidget.height =
di saya ipython_qtconsole_config.py
. Namun, ada masalah yang terkait dengan pendekatan ini.
Jawaban:
Apa yang akan Anda temui
Jika Anda ingin memanggil aplikasi terlebih dahulu dan, kemudian, menempatkan jendelanya pada posisi dan ukuran tertentu, waktu antara memanggil aplikasi dan saat jendela itu benar-benar muncul , tidak dapat diprediksi. Jika sistem Anda terisi, ini bisa jauh lebih lama daripada jika tidak digunakan.
Anda memerlukan cara "pintar" untuk memastikan pemosisian / pengubahan ukuran dilakukan (segera) setelah jendela muncul .
Script untuk memanggil aplikasi, tunggu hingga muncul dan posisikan di layar
Dengan skrip di bawah ini, Anda dapat memanggil aplikasi dan mengatur posisi dan ukurannya akan muncul dengan perintah:
Beberapa contoh:
Untuk memanggil
gnome-terminal
dan mengubah ukuran jendelanya menjadi 50% dan menempatkannya di sebelah kanan:Untuk menelepon
gedit
, letakkan jendelanya di sebelah kiri dan panggilgnome-terminal
, letakkan di sebelah kanan (aturv-size
46% untuk memberi sedikit ruang di antara jendela):Untuk memanggil Inkscape, letakkan jendelanya di bagian kiri / atas layar:
Script dan cara menggunakannya
instal keduanya
xdotool
danwmctrl
. Saya menggunakan keduanya karena mengubah ukuran denganwmctrl
dapat menyebabkan beberapa kekhasan pada (khusus)Unity
.setwindow
(tanpa ekstensi) di~/bin
; buat direktori jika perlu.~bin
, jalankan:source ~/.profile
Uji-coba skrip dengan perintah (misalnya)
Dengan kata lain:
Jika semua berfungsi dengan baik, gunakan perintah di mana pun Anda membutuhkannya.
Naskah
Apa yang dilakukannya
Ketika skrip dipanggil, itu:
wmctrl -lp
)ps -ef ww
, membandingkan pid jendela dengan pid aplikasi)Masalah kecil
Di Unity, ketika Anda (kembali) memposisikan dan (kembali) ukuran jendela dengan salah satu
wmctrl
atauxdotool
, jendela akan selalu menjaga muatan kecil ke batas layar Anda, kecuali jika Anda mengaturnya ke 100%. Anda dapat melihatnya pada gambar (3) di atas; sementarainkscape
jendela ditempatkan padax
posisi 0, Anda masih dapat melihat muatan kecil antara Unity Launcher daninkscape
jendela.sumber
wmctrl
terinstal, perintah:wmctrl -lG | grep <windowname>
akan menunjukkan output seperti:0x03600e4f 0 723 197 1114 563 jacob-System-Product-Name dimkeyboard.sh (~/Bureaublad) - gedit
. Dalam output ini, kolom ke-3 sampai ke-6 menunjukkan dimensi, x, y, lebar, lebar, tinggi.appAndParams = sys.argv[1] app = appAndParams[0].split(' ', 1)[0] get = lambda x: subprocess.check_output(["/bin/bash", "-c",x]).decode("utf-8") ws1 = get("wmctrl -lp"); t = 0 subprocess.Popen(["/bin/bash", "-c", appAndParams])
</pre> <edit> menolak untuk memformat kode itu. </edit>Perintah aktual yang Anda inginkan adalah sesuatu seperti
Itu akan membuat jendela saat ini mengambil setengah layar (ubah
$HALF
ke dimensi layar Anda) dan jepret ke sisi kiri. Untuk mengambil ke kanan, gunakanAnda juga dapat bermain dengan
wmctrl
untuk mendapatkan ID dari jendela yang Anda sukai daripada menggunakan:ACTIVE:
. Saya tidak dapat membantu di sana karena itu tergantung pada windows yang bersangkutan. Lihatman wmctrl
lebih lanjut.Saya sudah menulis naskah untuk itu. Saya tidak menggunakan Unity jadi saya tidak bisa menjamin itu akan berhasil, tetapi saya tidak melihat alasan mengapa tidak. Perlu
wmctrl
,xdpyinfo
dandisper
harus diinstal:Kemudian, simpan skrip di bawah ini sebagai
~/bin/snap_windows.sh
, buat agar dapat dieksekusichmod a+x ~/bin/snap_windows.sh
dan Anda dapat menjalankannyaUntuk mengambil ke sisi kanan. Gunakan
l
untuk sisi kiri dan tidak ada argumen untuk memaksimalkan jendela. Perhatikan bahwa ini berjalan pada jendela saat ini sehingga Anda harus menetapkan cara pintas untuk itu jika Anda ingin itu berjalan pada apa pun selain terminal.Script ini sedikit lebih rumit daripada yang Anda minta karena saya telah menulisnya untuk bekerja pada setup tunggal dan dual-monitor.
sumber
Anda dapat melakukan ini dengan menggunakan
xdotool
.Untuk menginstal
xdotool
Anda dapat menjalankan:Kemudian untuk mengirim Ctrl+ Alt+ <keypad_key>keystroke ke
X
jendela terminal Anda dapat menjalankan:* <keypad_key_value> = nilai tombol keypad dalam daftar di bawah ini
Untuk menjalankan program GUI dan mengirim keystroke ke
X
jendelanya (yang dalam hal ini adalah jendela aktif pada saatxdotool
pelaksanaan perintah) Anda dapat menjalankan:* <command> = perintah yang membuka jendela tempat Anda ingin mengirim keystroke; <delay> = waktu untuk menunggu dalam milidetik sebelum mengirim keystroke; <keypad_key_value> = nilai tombol keypad dalam daftar di bawah ini
Perhatikan bahwa dalam kebanyakan kasus Anda harus menjalankan perintah yang Anda keluarkan sebagai proses yang berdiri sendiri (misalnya dengan menjalankan
nohup <command> &
alih-alih<command>
dalam contoh di atas), jikaxdotool
tidak, tidak akan dijalankan sampai<command>
eksekusi selesai.Anda juga harus mengatur beberapa penundaan, jika tidak, tombol akan dikirim sebelum jendela target dimuat penuh
X
(penundaan500ms
seharusnya dilakukan).Nilai yang mungkin untuk
<keypad_key_value>
adalah:90
87
88
89
83
84
85
79
80
81
Sebagai aturan praktis, untuk mengetahui nilai tombol apa saja pada keyboard di
X
lingkungan, seseorang dapat menjalankanxev
dan menekan tombol untuk menampilkan nilainya di dalam terminal.sumber
Saya telah membangun sebuah aplikasi bernama Worksets (on github ) untuk Unity yang memungkinkan Anda melakukan ini dengan mudah melalui antarmuka pengguna grafis - Ini gratis dan open source.
Ini pada dasarnya adalah pembungkus untuk solusi wmctrl dan xdotool yang terdaftar sebagai jawaban di sini, dan menyediakan cara mudah untuk membuat dan menyimpan pengaturan seperti itu dengan cepat.
sumber
Saya tidak memiliki perwakilan untuk mengomentari secara langsung posting bagus Jacob Vlijm, tetapi saya memodifikasi skrip untuk mengizinkan memulai aplikasi dengan argumen (perlu digunakan
setwindow
dengangedit --new-window
). Perubahan:untuk:
sumber
Saya bermain-main dengan skrip Terdon dari atas dan menambahkan beberapa hal baru (kemampuan untuk memilih monitor dan mengatur ketinggian untuk setiap monitor). Saya akan memperpanjang untuk menambahkan lebih banyak monitor. Semoga orang lain akan merasakan manfaatnya.
Sintaks dasar:
Di mana prog_name adalah apa pun yang Anda simpan kode ini sebagai; monitor adalah nomor monitor mis. 1 atau 2; l / r / m adalah kiri atau kanan atau maks; dan window_name adalah nama (atau sebagian dari nama itu) dari jendela target.
Misalnya:
Skrip bash
sumber