Cara menggunakan widget grafis dalam skrip bash dengan zenity

Cara menggunakan widget grafis dalam skrip bash dengan zenity

Zenity adalah utilitas yang sangat berguna yang memungkinkan kami membuat antarmuka pengguna grafis untuk skrip shell kami. Beberapa widget ada, dan dapat digunakan dengan memohon program dengan opsi masing -masing. Widget didasarkan pada GTK toolkit, dan mengembalikan hasil interaksi pengguna baik pada output standar atau sebagai kode pengembalian.

Dalam tutorial ini Anda akan belajar:

  • Apa saja opsi zenity umum
  • Apa saja widget yang paling berguna dan bagaimana menggunakannya



Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi-independen
Perangkat lunak Utilitas zenity
Lainnya Keakraban dengan shell (bash dalam kasus ini) dan konsep seperti Subshell and Exit Codes
Konvensi # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa

Instalasi

Itu zenity Paket termasuk dalam repositori dari semua distribusi Linux utama, dan mungkin sudah diinstal jika Anda menggunakan Gnome lingkungan desktop. Untuk menginstalnya, kami dapat menggunakan manajer paket distribusi favorit kami, IN Fedora, Misalnya, kita bisa menggunakan dnf:

$ sudo dnf menginstal zenity


Saat menggunakan distribusi berbasis Debian dan Debian seperti Ubuntu, kita dapat menggunakan perintah apt-get:

$ sudo apt-get install zenity

Zenity sudah termasuk dalam archlinux tambahan Repositori, oleh karena itu kami dapat menginstalnya melalui Pacman:

$ sudo Pacman -s zenity

Opsi generik

Sebelum kita mulai melihat beberapa widget paling berguna yang disediakan oleh zenity, kita harus menyebutkan beberapa opsi generik yang tersedia yang dapat kita gunakan untuk mengubah perilaku program.

Kami menyebutnya generik karena mereka dapat diterapkan secara independen dari widget yang dipilih: --judul, --janda-icon, --lebar, --tinggi Dan --waktu habis.

Pertama -tama kami memiliki --judul Opsi: kita dapat menggunakannya untuk menentukan judul untuk jendela dialog. Demikian pula, --ICON Jendela opsi mari kita tentukan ikon yang akan digunakan sebagai ikon untuk jendela, dan akan terlihat, misalnya, di bilah tugas. Untuk menampilkan ikon di widget, sebagai gantinya, kita dapat menggunakan --nama ikon opsi dan berikan salah satu nama ikon yang diizinkan (berikut adalah daftar lengkap) sebagai argumen. Untuk menggunakan ikon stok yang disediakan dalam kesalahan, info, pertanyaan, atau dialog peringatan, misalnya, kami dapat menentukan masing -masing: dialog-kesalahan, dialog-info, pertanyaan dialog atau Peringatan Dialog.

Itu --lebar Dan --tinggi Pilihannya cukup jelas: Mereka membiarkan kami mendefinisikan geometri jendela dialog kami.

Akhirnya, dengan menggunakan --waktu habis Opsi kita dapat mengatur batas waktu dalam hitungan detik untuk dialog: Setelah jumlah waktu yang ditentukan, itu akan ditutup secara otomatis.



Widget yang tersedia

Ada beberapa widget yang dapat kami gunakan berkat Zenity: masing -masing memiliki tujuan tertentu. Mari kita lihat beberapa dari mereka.

Widget Kalender

Widget Kalender akan menampilkan kalender dan membiarkan pengguna memilih tanggal, dengan memilih bulan, hari dan tahun. Nilai yang dipilih akan dikembalikan pada output standar. Untuk meluncurkan kalender widget, yang harus kita lakukan hanyalah memohon zenity, dengan --kalender pilihan:

$ zenity --Calendar

Kita dapat menggunakan serangkaian opsi untuk menyempurnakan perilaku widget, misalnya, dengan menggunakan --hari, --bulan, --tahun dan memberikan Int Sebagai nilai, kita dapat menetapkan, masing -masing, hari default, bulan dan tahun yang akan ditampilkan di widget. Untuk menentukan format spesifik di mana tanggal yang dipilih harus dikembalikan, kita dapat menggunakan --tanggal opsi dan tentukan pola di strftime gaya.



Widget Kalender

Widget entri

Widget entri sangat berguna ketika kita perlu meminta beberapa teks kepada pengguna. Katakanlah misalnya kita perlu meminta pengguna untuk memasukkan namanya; kita dapat menjalankan perintah berikut:

$ zenity --entry - -title "permintaan nama" --text "Harap masukkan nama Anda:"


Di sini kami menggunakan --judul Dan --entri-teks Opsi untuk menyesuaikan, masing -masing, judul dan label yang untuk widget. Setelah kami menjalankan perintah di atas, widget akan muncul:



Widget entri

Teks yang dimasukkan oleh pengguna akan dikembalikan pada output standar.

Widget pemilihan file

Widget Pemilihan File memungkinkan kami menampilkan antarmuka grafis yang bagus untuk membiarkan pengguna memilih satu atau lebih file. Sama seperti yang kami lakukan dalam contoh sebelumnya, kami dapat menggunakan serangkaian opsi untuk memodifikasi perilaku dan penampilan dialog. Salah satu yang paling penting adalah --nama file yang dapat digunakan untuk mengatur file/direktori yang akan dipilih secara default. Berikut ini adalah gambaran cepat dari opsi dan fungsionalitas yang mereka berikan:

Opsi widget pemilihan file zenity
Pilihan Fungsi
-nama file Atur direktori/file default yang akan dipilih di widget
-banyak Aktifkan kemampuan untuk memilih beberapa file sekaligus
-File-filter Tentukan filter untuk nama file
-direktori Batasi seleksi ke direktori
-menyimpan Jalankan widget dalam mode "Simpan".
-konfirmasi-overwrite Tanyakan kepada pengguna untuk konfirmasi saat menimpa file yang ada
-pemisah Tentukan pemisah yang akan digunakan untuk memisahkan jalur saat beberapa file
dipilih

Mari kita lihat contoh penggunaan widget. Katakanlah kami ingin membiarkan pengguna memilih beberapa file, dan kami ingin konten pengguna $ Rumah Direktori akan ditampilkan di widget saat dibuka. Yang harus kita lakukan adalah menjalankan perintah berikut:

$ zenity --pileksi-file-multiple --filename "$ home/"

Anda dapat melihat bahwa kami memberikan trailing / ke jalan: dengan cara ini konten direktori ditampilkan, bukan direktori itu sendiri. Ini widget kami:



Widget pemilihan file

Setelah kami mengklik tombol "OK", jalur absolut dari file yang dipilih akan dikembalikan pada output standar, dipisahkan oleh karakter, yang merupakan default adalah |:

/home/egdoc/unduhan/a.txt |/home/egdoc/download/b.txt

Kami dapat dengan mudah mengubah pemisah, memberikan karakter yang ingin kami gunakan sebagai argumen opsi -Peparator.

Jika kita membuka dialog di Simpan mode, Pengguna akan diminta untuk memberikan nama file yang ingin dia simpan. Jika file ada dan kami menyediakan --konfirmasi-overwrite Opsi, dia akan diminta untuk mengkonfirmasi dia ingin menimpanya:

$ zenity--file-seleksi-save --confirm-overwrite --filename "$ home/"

Jalur yang dipilih akan dikembalikan ke output standar, dan kami akan bebas menggunakannya di skrip kami.

Widget kemajuan

Widget lain yang menarik adalah kemajuan satu: kita dapat meluncurkannya dengan menggunakan zenity dengan --kemajuan pilihan. Kita dapat menggunakannya, misalnya, untuk menunjukkan kemajuan operasi yang sudah berjalan lama. Berikut adalah beberapa opsi paling berguna yang dapat kami gunakan dengan widget:

Pilihan Fungsi
-persentase Menetapkan nilai persentase awal dari bilah kemajuan
-Tutup otomatis Secara otomatis menutup dialog saat kemajuan selesai
-auto-kill Bunuh proses induk jika dialog ditutup dengan pembatalan
tombol
-No-Cancel Jangan menampilkan tombol batal

Berikut adalah contoh bagaimana kita dapat menggunakan widget dalam skrip bash:



#!/bin/bash # # skrip dummy untuk mendemonstrasikan widget zenity progress! (echo 25 echo "# pengaturan ..." sleep 2 echo 30 echo "# membaca file ..." sleep 2 echo 70 echo "# membuat konten ..." sleep 1 echo 100 echo "# selesai!") | zenity--title" progress bilah contoh "--progress-auto-kill
Menyalin

Skrip di atas sebenarnya tidak melakukan operasi apa pun, tetapi berguna untuk memahami cara kerja widget. Ada dua hal utama yang harus diperhatikan dalam Kode: Pertama -tama, perintah yang akan dieksekusi dibungkus di antara tanda kurung, oleh karena itu dieksekusi dalam a subsksklell: Ini diperlukan agar widget bekerja dengan benar; Kedua, ketika kami menggemakan garis yang dimulai dengan angka, ini akan ditafsirkan sebagai persentase dari bilah kemajuan.

Dengan cara yang sama, ketika kita menggemakan garis yang dimulai dengan # karakter, itu akan digunakan sebagai teks yang akan ditampilkan di widget. Berikut adalah video pendek dari skrip yang sedang beraksi:

Info, peringatan dan widget kesalahan

Untuk menampilkan info, peringatan atau pesan kesalahan, kami dapat menggunakan zenity dengan --info, --peringatan Dan --kesalahan Opsi, masing -masing. Dalam hal ini kami menggunakan --teks opsi untuk menentukan pesan. Berikut adalah contoh pemberitahuan:

$ zenity --info --sdth = 400 -height = 200 --text "Ini adalah pemberitahuan!"



Widget pemberitahuan

Menggunakan widget peringatan, sama mudahnya:

$ zenity - -warning --didth = 400 -height = 200 --text "Ini adalah peringatan!"



Widget peringatan

Ini, sebaliknya adalah contoh dari pesan kesalahan:

$ zenity --Error --Didth = 400 --Teight = 200 --Text "Ini adalah kesalahan!"



Widget kesalahan

Widget pertanyaan

Untuk mengajukan pertanyaan kepada pengguna dan mendapatkan jawabannya, kami dapat menggunakan pertanyaan widget, memohon zenity dengan --pertanyaan pilihan. Kami menentukan pertanyaan menggunakan --teks opsi, dan tentukan label tombol 'OK' dan 'membatalkan', masing -masing menggunakan --OK-Label Dan --Batalkan label pilihan. Inilah contohnya:

$ zenity --question --text "Apakah Anda yakin ingin berhenti?"---no-wrap --ok-label" Ya "--Cancel-label" Tidak "



Widget pertanyaan



Dalam hal ini, kami juga menggunakan --tidak ada bungkus opsi, untuk menghindari pembungkus teks di widget. Hasil pilihan pengguna tidak akan ditampilkan pada output standar; Sebaliknya, perintah akan mengaturnya Kode Keluar Dengan demikian, jadi itu akan kembali 0 Jika pengguna mengklik tombol 'OK', dan 1 Jika dia mengklik pada 'Batalkan' satu atau menutup jendela (ini mungkin tampaknya kontra-intuitif, tetapi ingat dari kode keluar 0 berarti bahwa perintah dieksekusi dengan keberhasilan di shell).

Widget kata sandi

Ini adalah widget yang harus kita gunakan ketika kita ingin pengguna memasukkan kata sandi atau informasi sensitif apa pun: teks yang dia masukkan ditutupi oleh peluru:



Widget kata sandi

Sementara teks yang dimasukkan dari pengguna bertopeng, nilai yang dikembalikan oleh widget akan terlihat jelas pada output standar.

Widget pemilihan warna

Ini adalah widget bagus lainnya. Dengan menggunakannya, kita dapat membuat pengguna memilih warna dari palet. Untuk menjalankannya, kami menggunakan zenity dengan --seleksi warna pilihan. Kita dapat menentukan warna yang awalnya dipilih dengan menggunakan --warna dan memberikan warnanya sebagai argumen. Inilah contohnya:



Widget pemilihan warna

Secara opsional, kita dapat menampilkan palet warna sebagai gantinya, dengan --Show-Palette pilihan:

$ zenity-seleksi-warna-warna merah-palette show



Palet widget pemilihan warna

Warna yang dipilih oleh pengguna akan dikembalikan RGB Notasi tentang output standar. Misalnya saat memilih warna merah, berikut ini akan dikembalikan:

RGB (255,0,0)

Widget daftar

Widget berikutnya yang akan kita lihat, adalah widget daftar. Dengan itu, dimungkinkan untuk membuat dialog multi-kolom, dan secara opsional membiarkan pengguna memilih satu atau beberapa opsi melalui kotak centang atau tombol radio. Untuk membuat zenity menampilkan dialog jenis ini, kami menggunakan --daftar opsi dan tentukan kolom dan isinya; Jika kita menghilangkannya, perintah akan gagal:

$ zenity -List tidak ada judul kolom yang ditentukan untuk dialog daftar.
Menyalin

Untuk mendefinisikan header kolom kami menggunakan --kolom opsi dan berikan string sebagai argumen. Kami mengulangi perintah untuk setiap kolom yang ingin kami buat:

$ zenity --ist -Pilihan kolom -distribusi kolom

Dengan perintah di atas kami membuat dua kolom, dengan header "seleksi" dan "distribusi". Sekarang kami akan memberi pengguna serangkaian baris, masing -masing mewakili distribusi Linux. Di kolom pertama setiap baris kami akan menempatkan kotak centang untuk membiarkan pengguna memilih entri yang sesuai:



$ zenity --ist -seleksi kolom -distribusi kolom palsu debian true fedora -radiolist

Setiap string yang kami berikan setelah definisi kolom dikaitkan dengan kolom, tergantung pada urutan penampilannya. Seperti yang Anda lihat, kami membuat dua baris. Di kolom pertama setiap baris kami memberikan nilai: kami menggunakan PALSU sehingga kotak centang atau tombol radio yang sesuai tidak dipilih saat widget ditampilkan, dan BENAR untuk mengatur input sebagai ditandai secara default. Ini widget yang dihasilkan:



Widget daftar

Saat kami mengklik tombol "OK", dan melakukan pilihan kami, nilai yang terkait dengan baris akan dilaporkan pada output standar. Jika kami ingin membiarkan pengguna memilih beberapa baris, kami dapat menggunakan --daftar periksa Opsi: | karakter akan digunakan untuk memisahkan nilai yang dipilih.

Kesimpulan

Dalam tutorial ini kami belajar untuk mengetahui zenity, utilitas yang memungkinkan kami menggunakan dialog grafis dalam skrip shell kami. Kami melihat apa saja opsi umum yang dapat kami gunakan dengan semua widget, seperti --lebar Dan --tinggi, Dan kami belajar menggunakan beberapa widget paling berguna yang dapat kami hasilkan dengan program ini. Untuk mempelajari lebih lanjut tentang zenity Anda dapat berkonsultasi!

Tutorial Linux Terkait:

  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Menguasai loop skrip bash
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Loop bersarang dalam skrip bash
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Menangani input pengguna dalam skrip bash
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Tutorial debugging GDB untuk pemula
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Sistem Linux Hung? Cara melarikan diri ke baris perintah dan…