{"id":23055355,"url":"https://github.com/hoverth/wayland-virtual-keyboards","last_synced_at":"2026-01-18T06:51:25.270Z","repository":{"id":266788410,"uuid":"899340704","full_name":"Hoverth/wayland-virtual-keyboards","owner":"Hoverth","description":"Useful resources on making OSKs on Wayland","archived":false,"fork":false,"pushed_at":"2024-12-07T21:19:34.000Z","size":14,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-03T05:17:05.234Z","etag":null,"topics":["developer-resources","virtual-keyboards","wayland"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gfdl-1.3","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hoverth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-06T04:20:42.000Z","updated_at":"2025-03-16T05:18:13.000Z","dependencies_parsed_at":"2024-12-06T06:33:35.245Z","dependency_job_id":null,"html_url":"https://github.com/Hoverth/wayland-virtual-keyboards","commit_stats":null,"previous_names":["hoverth/wayland-virtual-keyboards"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Hoverth/wayland-virtual-keyboards","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hoverth%2Fwayland-virtual-keyboards","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hoverth%2Fwayland-virtual-keyboards/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hoverth%2Fwayland-virtual-keyboards/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hoverth%2Fwayland-virtual-keyboards/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hoverth","download_url":"https://codeload.github.com/Hoverth/wayland-virtual-keyboards/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hoverth%2Fwayland-virtual-keyboards/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28532108,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["developer-resources","virtual-keyboards","wayland"],"created_at":"2024-12-16T01:11:46.367Z","updated_at":"2026-01-18T06:51:25.224Z","avatar_url":"https://github.com/Hoverth.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Virtual Keyboards on Wayland\n\nVirtual keyboards, also called on-screen keyboards (OSKs), is a piece of\nsoftware that allows a user to input keys via a touchscreen or a mouse\ninterface, instead of a physical keyboard.\n\nBroadly speaking, OSKs can be split into two categories:\n\n- Mobile keyboards, primarily for portrait screens, more focussed on\nsimple text input, like what would be found on Android or iOS as default.\n- Desktop keyboards, primarily for landscape screens or larger screens,\nmore focussed on controlling a computer to it's fullest extent, including\nuse of modifier keys and keybinds.\n\nNote that these categories are flexible, and just mainly serve as an example\nof categorisation of OSKs. Others that could exist are simple/advanced and \ntouchscreen/mouse, as examples.\n\nIn this document I'll outline what each are typically used for, some notes\non what Wayland currently has in place for implementations, some\nrequirements for both protocol + compositor-side and application-side\ndevelopers (application-side devs here being the ones working on OSKs on\nWayland), and finally some examples of those keyboards (mainly Wayland, some X).\n\n## Table of Contents\n\n\u003c!-- vim-markdown-toc GFM --\u003e\n\n- [Common Misconceptions](#common-misconceptions)\n- [Mobile Keyboards](#mobile-keyboards)\n  - [Mobile OSK Use-cases](#mobile-osk-use-cases)\n  - [Mobile OSK Implementation Details](#mobile-osk-implementation-details)\n  - [Mobile OSK Requirements](#mobile-osk-requirements)\n  - [Mobile OSK Examples](#mobile-osk-examples)\n- [Desktop Keyboards](#desktop-keyboards)\n  - [Desktop OSK Use-cases](#desktop-osk-use-cases)\n  - [Desktop OSK Implementation Details](#desktop-osk-implementation-details)\n  - [Desktop OSK Requirements](#desktop-osk-requirements)\n  - [Desktop OSK Examples](#desktop-osk-examples)\n- [Resources](#resources)\n  - [Wayland Protocols](#wayland-protocols)\n  - [OSKs](#osks)\n  - [Other Tips](#other-tips)\n- [Contributing](#contributing)\n  - [Contributing Guidelines](#contributing-guidelines)\n- [License](#license)\n- [Authors](#authors)\n\n\u003c!-- vim-markdown-toc --\u003e\n\n## Common Misconceptions\n\n- OSKs aren't just primarily for touchscreens, they should be able to be used\neffectively with mice and other pointer methods as well. This means that some\naspects of an OSK's design need to be examined from multiple angles, such as\nthe amount of screen estate that the OSK takes up, as touchscreen OSKs should\ntake up enough for the fingers of user to be able to accurately use the OSK,\nbut mouse users have typically higher precision, so they may prefer a smaller\namount of screen estate to be taken up\n\n## Mobile Keyboards\n\nMobile keyboards are typically used to input text in an efficient and\nuser-friendly manner, with less concern on more specialised input. They\nmore frequently are found on touchscreen devices, especially ones with\nportrait modes.\n\nAndroid and iOS keyboards are what I would consider to be the gold\nstandard, and we should probably seek to reproduce how they work.\n\nNote that I don't include something like\n[Hacker's Keyboard](https://github.com/klausw/hackerskeyboard), as that\ncontains more specialised keyboard features, such as modifier keys.\n\n### Mobile OSK Use-cases\n\n- Texting / messaging\n- Simple note writing\n- Dialling a phone number\n\n### Mobile OSK Implementation Details\n\n- You will want to look into preediting/commiting strings using a protocol\nlike [input-method-unstable-v1.xml](https://wayland.app/protocols/input-method-unstable-v1)\n\n### Mobile OSK Requirements\n\n- Displays on the lower half of the screen\n- Ability to switch layers to access numbers \u0026 symbols\n- Spell-checking (Optional)\n- Mobile keyboards usually appear only when a text input is selected\n\n### Mobile OSK Examples\n\n- Maliit\n- Squeekboard\n\n## Desktop Keyboards\n\nDesktop keyboards are typically used to emulate a full keyboard,\nincluding usually having a GUI that shows a keyboard layout, complete\nwith special keys, modifier keys and levels.\n\nThey are usually less focussed on text-specific input, and allow the user\nto input keybinds and other specialised input to control their computer.\n\nI find that desktop OSKs are more useful when the input method is a mouse.\n\n### Desktop OSK Use-cases\n\n- For use on screens where the keyboard should not take up large amounts\nof screen estate, such as on a touchscreen TVs or projector systems\n- Navigating programs using non-text input, e.g. special keys, keybinds\n  - Desktop Environments / Compositors\n  - Terminal (to send SIG events, e.g. `Ctrl+C`)\n  - Spreadsheet Program (More advanced text editing, home/end keys, etc)\n  - Games (using something like the arrow keys)\n- Using the OSK as a GUI keyboard macro pad\n\n### Desktop OSK Implementation Details\n\n- Requires a protocol that enables sending key events\n- I have found that the documentation around what keymaps is a tad lacking,\nsee [the Xkbcommon docs](https://xkbcommon.org/doc/current/xkbcommon-keysyms_8h.html)\n\n### Desktop OSK Requirements\n\n- Ability to float\n- Ability to emulate a full hardware keyboard (including modifier keys)\n- Ability to change the window's opacity\n- Ability to be shown even when there isn't a text input active\n(i.e. an always shown setting)\n- Support for differing key sizes (touchscreen users need bigger keys,\nwhereas mice users need smaller keys so they can still see most of the\nscreen)\n\n### Desktop OSK Examples\n\n- [Onboard](https://launchpad.net/onboard) (X11,\nthis is my personal go-to virtual keyboard)\n- I have not seen any Wayland desktop OSKs\n\n## Resources\n\n### Wayland Protocols\n\n- [input-method-unstable-v1.xml](https://wayland.app/protocols/input-method-unstable-v1)\n- [input-method-unstable-v2.xml](https://wayland.app/protocols/input-method-unstable-v2)\n- [text-input-unstable-v3.xml](https://wayland.app/protocols/text-input-unstable-v3)\n- KDE's [fake-input.xml](https://wayland.app/protocols/kde-fake-input)\n- External [virtual-keyboard-unstable-v1.xml](https://wayland.app/protocols/virtual-keyboard-unstable-v1)\n\n### OSKs\n\n- [Awesome-Wayland's OSK Links](https://github.com/rcalixte/awesome-wayland?tab=readme-ov-file#on-screen-keyboards)\n- [Maliit-Keyboard](https://maliit.github.io/)\n- [Squeekboard](https://github.com/droidian/squeekboard)\n- [QVK](https://invent.kde.org/apol/qvk) (More of a demo in it's current state, 2024/12/06)\n\n### Other Tips\n\n- KDE exposes the [input-method-unstable-v1.xml](https://wayland.app/protocols/input-method-unstable-v1)\n(contrary to what the page claims), but it's hidden to applications by\ndefault. You need to add `X-KDE-Wayland-VirtualKeyboard=true` into the\napplications `.desktop` file that is installed in the applications directory,\n`/usr/share/applications`, for KDE to accept it, and then it'll be available\nto select in System Settings.\n\n## Contributing\n\nGot some resources to add or tips other developers should know? Open an issue\nor a pull request and it can be added!\n\nBy contributing, you agree to license your contribution under the license.\n\n### Contributing Guidelines\n\n- As this is an accessibility project (as OSKs are accessibility tools), any\nand all use-cases for an OSK should be seen as valid methods that should be\naccounted for and supported to some degree.\n\n## License\n\nThis file is licensed under the\n[GNU FDL v1.3](https://www.gnu.org/licenses/fdl-1.3.html).\n\n## Authors\n\n- [Thomas Dickson (Hoverth)](https://github.com/Hoverth)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoverth%2Fwayland-virtual-keyboards","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhoverth%2Fwayland-virtual-keyboards","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoverth%2Fwayland-virtual-keyboards/lists"}