Linux Fu: Widget Mudah | hari hack

Berikut skenarionya. Anda memiliki mikrokontroler yang membaca sejumlah item — suhu, tekanan, apa pun — dan Anda ingin memiliki tampilan untuk desktop Linux Anda yang berada di panel dan menunjukkan statusnya kepada Anda. Jika Anda mengkliknya, Anda mendapatkan status yang diperluas dan bahkan dapat mengeluarkan beberapa perintah. Sebagian besar desktop mendukung gagasan tentang widget, tetapi mengembangkannya sangat menyusahkan, bukan? Dan bahkan jika Anda mengembangkannya untuk KDE, bagaimana dengan orang-orang yang menggunakan Gnome?

Ternyata ada jawaban yang mudah dan tampaknya terinspirasi oleh, dari semua hal, alat dari dunia Mac. Alat itu disebut BitBar (sekarang XBar). Program itu menempatkan widget di bilah menu Anda yang dapat menampilkan apa pun yang Anda inginkan. Anda dapat menulis program apa pun yang Anda suka — skrip shell, C, apa pun. Output yang dicetak dari program mengontrol apa yang muncul di widget menggunakan bahasa seperti markup sederhana.

Itu bagus untuk Mac, tapi bagaimana dengan Linux? Jika Anda menggunakan Gnome, ada proyek yang sangat mirip bernama Argos. Ini sebagian besar kompatibel dengan XBar, meskipun ada beberapa hal yang ditambahkan yang khusus untuknya. Jika Anda menggunakan KDE (seperti yang saya lakukan) maka Anda akan menginginkan Kargos, yang kurang lebih merupakan port dari Argos dan menambahkan beberapa hal sendiri.

Kabar Baik, Kabar Buruk

Kabar baiknya adalah, secara teori, Anda dapat menulis skrip yang akan berjalan di bawah ketiga sistem tersebut. Kabar buruknya adalah bahwa masing-masing memiliki perbedaan dan kebiasaannya sendiri. Jelas juga, jika Anda menggunakan program yang sesuai yang dapat menimbulkan masalah pada Mac kecuali Anda mengkompilasi ulang.

Untuk memperburuk masalah itu, dokumentasi untuk Kargos tampaknya salah. Ini sebagian karena versi di repositori KDE sudah kedaluwarsa dan bahkan jika Anda mengambil rilis terbaru dari GitHub, dokumentasinya masih ketinggalan zaman. Anda benar-benar ingin menginstal dari tiruan GitHub, bukan dari paket rilis atau dari repositori KDE untuk plasmoid. Bagian dari masalahnya juga adalah dokumentasinya singkat dan Anda terkadang memiliki hal-hal yang berfungsi tetapi tidak dalam setiap kasus. Tidak jelas apakah ini karena desain atau interaksi dengan desktop KDE yang selalu berubah.

Karena saya menggunakan KDE, saya akan fokus pada Kargos, dan saya akan menunjukkan beberapa hal tentang Argos. Tetapi Anda dapat mengharapkan untuk melakukan beberapa eksperimen dengan cara apa pun.

Dasar-dasar

Saat Anda menginstal widget, Anda harus mengarahkannya ke skrip. Secara umum, skrip akan berjalan secara berkala. Untuk Kargos, Anda dapat mengatur interval itu dengan dua cara berbeda yang akan kita bicarakan nanti.

Dalam kasus paling sederhana, Anda akan memiliki skrip yang menampilkan baris teks yang akan muncul di panel, pemisah, dan kemudian satu atau lebih baris teks yang akan muncul saat Anda mengklik widget. Pertimbangkan ini:

#!/bin/bash echo Halo Hackaday echo — echo Test echo 1 echo 2 echo 3 echo 4

Jika Anda meletakkan widget Kargos di panel dan mengaturnya untuk membaca skrip Anda, Anda akan berakhir hanya dengan teks Hello Hackaday di panel Anda. Ketika Anda mengklik, Anda akan melihat sesuatu seperti ini:

Kegembiraan

Sedikit lebih keren

Seperti itu, ini tidak terlalu menarik. Namun, setiap baris teks dapat memiliki karakter pipa dan beberapa atribut untuk merapikan dan menambahkan fungsi. Ganti satu baris yang mengatakan Hello Hackaday dengan ini:

ICON=$( curl -s “https://hackaday.com/favicon.ico | base64 -w 0 ) echo “Halo Hackaday | image=”$ICON” href=http://www.hackaday.com”

Sekarang panel akan terlihat sedikit lebih keren dan jika Anda mengklik ikon tautan rantai kecil, Anda akan mengunjungi situs web favorit Anda. Tentu saja, hal yang menarik sebenarnya adalah ketika Anda dapat membuat item berubah. Jika Anda menyetel interval penyegaran pada layar konfigurasi, skrip akan berjalan sesering itu. Anda juga dapat memberi nama skrip dengan interval pengulangan. Misalnya, skrip haddemo.10s.sh akan berjalan setiap 10 detik tetapi haddemo.2m.sh akan berjalan setiap dua menit.

Anda juga dapat menambahkan atribut refresh=true ke baris teks untuk membuat mengkliknya menjalankan skrip lagi. Misalkan Anda ingin melakukan ping ke google sesuai permintaan. Anda dapat mengatur timer ke 0 dan melakukan ini:

#!/bin/bash OUTPUT=$( ping -c 1 -q google.com | grep ^rtt | cut -d ‘ ‘ -f 4 | cut -d ‘/’ -f 1 ) jika [ -z “$OUTPUT” ]lalu echo “Kesalahan klik untuk menyegarkan | refresh=true color=oranye” bash=”‘/usr/bin/systemsettings kcm_networkmanagement'” terminal=false fi # dapatkan bilangan bulat untuk dibandingkan (bash tidak suka float) IOUT=$( echo $OUTPUT | sed s/\\.// ) COLOR=hijau jika [ $IOUT -gt 90000 ] # 900000 adalah 90 ms maka COLOR=red fi echo “Google.com: $OUTPUT ms | refresh=true color=$COLOR” bash=”‘/usr/bin/systemsettings kcm_networkmanagement'” terminal=false echo —

Sekarang Anda akan mendapatkan waktu ping dari Google di bilah Anda. Ini akan berubah warna jika lambat atau tidak dapat melakukan ping. Sebuah tombol kecil akan memungkinkan Anda membuka manajemen jaringan.

Namun…

Warna tampaknya tidak berfungsi pada menu tarik-turun, yang mungkin merupakan manajer desktop yang memaksa warna tema, sehingga jarak tempuh Anda mungkin berbeda. Ada juga beberapa perbedaan dibandingkan dengan Argos. Misalnya, Argos memiliki variabel lingkungan yang memberi tahu Anda apakah widget terbuka atau tidak. Itu memungkinkan Anda untuk tidak menjalankan bagian skrip yang tidak perlu untuk kinerja yang lebih baik.

Ada perbedaan lain juga, tetapi jika Anda tetap berpegang pada dasar-dasarnya, Anda akan baik-baik saja. Bahkan di tempat yang berbeda, masih lebih mudah daripada menulis dua widget yang sama sekali berbeda untuk sistem yang berbeda.

Ada juga tampaknya beberapa perilaku aneh. Misalnya, atribut onclick juga tidak berfungsi di item dropdown. Tentu saja, ini open source, jadi jika Anda sangat membencinya, silakan perbaiki!

Contoh Besar

Karena saya suka mengikuti berita utama di Hackday, saya memutuskan untuk memanfaatkan fitur Kargos. Pada contoh sebelumnya, saya hanya memiliki satu baris sebelum pemisah dropdown (“—“). Tetapi jika Anda memiliki lebih dari satu baris, widget akan berputar melaluinya dengan penundaan yang dapat Anda atur di pengaturan widget.

Menggunakan awk mudah untuk membaca RSS feed Hackaday dan mengeluarkan judul dan link. Beberapa gambar dan Anda akan mendapatkan tampilan RSS yang bagus. Penguraian mungkin tidak berfungsi untuk umpan RSS sewenang-wenang karena cukup sederhana, tetapi — secara teori — Anda harus dapat mengadaptasi ini untuk umpan lain.

Berikut kodenya:

#!/bin/bash curl “https://hackaday.com/feed/” 2>/dev/null | awk ‘ MULAI { n=-1; } # lewati item pertama // { # baca judul jika (n==-1) selanjutnya; gsub(“[[:space:]]*</?judul>[[:space:]]*”,””); item[n]=$0; Berikutnya; } /<link>/ { # baca link if (n==-1) { n=0; Berikutnya; } gsub(“[[:space:]]*</?tautan>[[:space:]]*”, “”); tautan[n++]=$0; next } END { # output teks widget untuk (i=0;i<n;i++) { printf("%s | href=\"%s\" imageURL=https://hackaday.com/wp-content/themes /hackaday-2/img/logo.png\n", item[i],tautan[i]); } print "---" # output baris dropdown untuk (i=0;i<n;i++) { printf("%s | href=\"%s\"\n",item[i],tautan[i]); } } ' <pra> <p>Itu tidak banyak kode untuk pembaca RSS lengkap. Anda dapat melihat cerita di panel dan mengkliknya di sana atau membuka widget untuk melihat daftar sekaligus.</p> <h2><span class="ez-toc-section" id="Langkah_selanjutnya"></span>Langkah selanjutnya<span class="ez-toc-section-end"></span></h2> <p>Karena datanya hanya teks, mudah untuk menghapus widget kecil menggunakan sistem ini. Misalnya, ini adalah widget status memori yang cukup berguna:</p> <p>#!/bin/bash cat /proc/meminfo echo — echo “<b>Alat</b>” echo “–System status | bash=/usr/bin/ksysguard onclick=bash” echo “–Htop | bash=/usr/bin/htop” terminal=true cat /proc/meminfo</p> <p>Jelas, memiliki skrip yang membaca data dari ESP32 atau Arduino akan menjadi sepele. Karena banyak hal yang ingin Anda lakukan dengan sesuatu seperti ini adalah sistem operasi agnostik, menjelajahi beberapa plugin untuk xbar mungkin memberi Anda gambaran.</p> <p>Jika Anda menginginkan sesuatu yang lebih canggih hanya untuk KDE, lihat Scriptinator. Anda dapat menyesuaikannya lebih banyak, tetapi ini sedikit lebih rumit untuk dikelola.</p> <p>Untuk beberapa alasan, saya terobsesi dengan feed Hackaday. Saya telah mengubahnya menjadi sistem file. Itu juga menyapa saya ketika saya masuk. Beberapa plugin yang akan Anda temukan ada di bash dan beberapa di Python. Jangan lupa Anda juga bisa mencampurnya.</p> </div><!-- .entry-content --> <footer class="entry-footer"> </footer><!-- .entry-footer --> </article><!-- #post --> <nav class="navigation post-navigation" aria-label="Posts"> <h2 class="screen-reader-text">Post navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://theapachepowwow.net/led-heart-mengawasi-karakter-runescape-anda/" rel="prev">← LED Heart Mengawasi Karakter RuneScape Anda</a></div><div class="nav-next"><a href="https://theapachepowwow.net/mengundang-siswa-dalam-seni-perhotelan-di-kelas-online/" rel="next">Mengundang Siswa Dalam: Seni Perhotelan di Kelas Online →</a></div></div> </nav> <!-- If has sidebar start --> </div> <!-- If has sidebar end --> </main><!-- .site-main --> </div><!-- .site-content --> <footer class="site-footer"> <div class="inner"> <div class="supplementary"> <div class="grid"> <div class="one-fourth"> <section id="recent-posts-2" class="widget widget_recent_entries"> <h2 class="widget-title">Recent Posts</h2> <ul> <li> <a href="https://theapachepowwow.net/cegah-kesalahan-siswa-dengan-kuis-silabus-mandiri-2/">Cegah Kesalahan Siswa dengan Kuis Silabus Mandiri</a> </li> <li> <a href="https://theapachepowwow.net/teardown-kc-bearifone-dapat-berbicara-tentang-teddy-ruxpin/">Teardown: KC Bearifone Dapat Berbicara Tentang Teddy Ruxpin</a> </li> <li> <a href="https://theapachepowwow.net/momen-pola-pikir-pertumbuhan-fokus-fakultas/">Momen Pola Pikir Pertumbuhan | Fokus Fakultas</a> </li> <li> <a href="https://theapachepowwow.net/penglihatan-malam-diy-dimana-empat-lebih-baik-dari-dua/">Penglihatan Malam DIY, Dimana Empat Lebih Baik Dari Dua</a> </li> <li> <a href="https://theapachepowwow.net/input-ganjil-dan-periferal-aneh-keyset-chorded-menciptakan-visi-engelbart/">Input Ganjil Dan Periferal Aneh: Keyset Chorded Menciptakan Visi Engelbart</a> </li> </ul> </section> </div> </div><!-- .grid --> </div><!-- .supplementary --> <div class="site-info"> <p class="copyright"> ©2022 The Apache Pow Wow <!-- Delete below lines to remove copyright from footer --> <!-- Delete above lines to remove copyright from footer --> </p> <a href="#" id="back-to-top" title="Back To Top"><i aria-hidden="true" class="icon-chevron-up"></i></a> </div><!-- .site-info --> </div><!-- .inner --> </footer><!-- .site-footer --> </div><!-- .site --> <script type='text/javascript' src='https://theapachepowwow.net/wp-content/themes/blogfeedly/js/custom.js' id='stsblogfeedly-script-js'></script> <script type='text/javascript' src='https://theapachepowwow.net/wp-content/plugins/easy-table-of-contents/vendor/smooth-scroll/jquery.smooth-scroll.min.js' id='jquery-smooth-scroll-js'></script> <script type='text/javascript' src='https://theapachepowwow.net/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js' id='js-cookie-js'></script> <script type='text/javascript' src='https://theapachepowwow.net/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js' id='jquery-sticky-kit-js'></script> <script type='text/javascript' id='ez-toc-js-js-extra'> /* <![CDATA[ */ var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","width":"auto","scroll_offset":"30"}; /* ]]> */ </script> <script type='text/javascript' src='https://theapachepowwow.net/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js' id='ez-toc-js-js'></script> </body> </html>