20230418 09h46m25s grim

Mengulik Tinywl, Kompositor Wayland Sederhana.

Halo sahabat Situsali, semoga kamu tidak bosan dengan bahasan tentang wayland, ya ? Kali ini saya akan sedikit membahas dan mengulik salah satu kompositor wayland yang cukup sederhana yaitu tinywl.

Tinywl, apa itu ?

Seperti yang saya sebutkan sebelumnya, tinywl merupakan sebuah kompositor wayland. Tinywl biasanya tersedia bersama kode sumber wlroots, bisa di cek pada direktori tinywl pada kode sumber wlroots. Tinywl bisa disebut implementasi sederhana dari sebuah kompositor wayland.

Tinywl, apakah memang sederhana ?

Jika dilihat dari fitur dan fungsi, menurut saya tinywl memang sederhana, karena tinywl hanya membawa beberapa fitur yaitu :

  • menampilkan dan membuka jendela.
  • autostart.
  • Cycle window / beralih ke jendela lain.
  • fungsi untuk keluar / quit dari kompositor.

Untuk melakukan hal lain, perlu usaha tambahan, seperti :

  • menutup jendela.

    Jika jendela tidak memiliki dekorasi (minimal tombol tutup / close ), kita perlu menutup jendela dengan cara menge-kill proses jendela dengan perintah killall melalui terminal.

  • tap to click, drag pada jendela.

    Tinywl belum membawa fitur tap to click dan drag pada jendela, jadi jika kamu pengguna touchpad, kamu akan agak riweuh ketika memilih jendela. Cara agar bisa melakukan tap to click dan drag dengan touchpad akan saya jelaskan di bawah.

  • menangkap gambar layar / screenshot.

    Tinywl belum membawa fitur screencopy yang memungkinkan kita untuk menangkap gambar layar / screenshot. Agar bisa menggunakan fitur screenshot kita perlu menambahkan protokol screencopy terlebih dahulu.

Menambahkan beberapa fitur pada tinywl.

Sebelumnya sempat saya sebut, bahwa ada beberapa fitur yang belum ada. Saya mencoba menambahkan beberapa dan berhasil berfungsi (bisa dicek di sini, di antaranya :

  • fungsi menutup jendela.

    Untuk menutup jendela, saya membuat sebuah fungsi sederhana untuk menutup jendela yang terfokus. Mengambil sebagian fungsi untuk jendela terfokus dari stage dan menambahkan satu fungsi dari wlr_xdg_shell yaitu wlr_xdg_toplevel_send_close.

    static void
    killclient(struct tinywl_server *server)
    {
    	struct wlr_surface *surface;
    	struct tinywl_view *view;
    	struct wlr_seat *seat;
    
    	seat = server->seat;
    
        // merujuk pada jendela terfokus
    
    	surface = seat->keyboard_state.focused_surface;
    	if (!surface)
    		return;
    
    	view = view_from_surface(server, surface);
    
        // menutup jendela terfokus
    
    	wlr_xdg_toplevel_send_close(view->xdg_toplevel);
    
    }
    
  • tap to click, drag pada jendela.

    Agar tap to click dan drag jendela dengan touchpad bisa berfungsi, saya perlu menggunakan libinput (referensi dari dwl). Saya perlu menambahkan beberapa baris dari fungsi createpointer milik dwl ke fungsi server_new_pointer milik tinywl. Setelah kompilasi, sekarang tap to click touchpad bisa berfungsi,

  • menangkap gambar layar / screenshot.

    Agar tinywl bisa kompatibel / cocok dengan tool penangkap layar grim, tinywl perlu ditambahkan protokol screencopy (wlr_screencopy_v1.h) dan output manager (wlr_output_management_v1.h). Saya mengammbil referensi dari stage untuk kedua protokol itu. Setelah diterapkan, sekarang tinywl akan bisa diambil tampilan layarnya menggunakan tool grim.

  • Manipulasi jendela (move, resize) melalui shortcut.

    Pada post beberapa waktu yang lalu, saya pernah berbagi tentang window manager yang saya kembangkan (berbasis stage). Di sana ada beberapa fungsi untuk manipulasi jendela (move, resize) melalui shortcut. Saya menyalinnya untuk tinywl dengan beberapa penyesuaian. Belum sepenuhnya berjalan baik (untuk bagian resize utamanya) / masih experimental tapi cukup bisa digunakan.

Wah, di mana saya bisa mencobanya ?

Untuk versi asli, bisa diunduh di tautan ini.

Untuk versi gubahan dari saya, bisa diunduh di tautan ini.

Sebagai catatan, tinywl memang bisa digunakan / usable, tapi akan agak kaku jika digunakan untuk keseharian. Jika hanya perlu kompositor untuk menampilkan jendela program, tinywl sudah lebih dari cukup.

Tangkapan Layar.

Berikut ini adalah satu, dua tangkapan layar dari tinywl.

Tinywl dengan fitur maximize vertikal, mengambil dari fungsi kompositor stage.

20230418 09h45m25s grim

Tinywl dengan fitur fullscreen untuk mengatur background semu.

20230418 09h46m25s grim

Artikel Terkait

Leave a Reply

Your email address will not be published. Required fields are marked *