ChromeOS, Klawisze Trwałe i problem ze znakami wywoływanymi prawym klawiszem Alt (AltGr)

Niedawno napotkałem na bardzo interesujący problem z Chromebookiem mojej znajomej.

Moja koleżanka jest niepełnosprawna i pisze na swoim blogu antybariera.pl jednym palcem. Ponieważ domyślnie pisze po polsku, aby wstawić znaki specjalne, takie jak ąśćżeł, musiałaby użyć kombinacji klawiszy. Musiałaby do tego użyć dwóch palców, co jest niezwykle trudne, jeśli nie niemożliwe.

Chromebooki są wyposażone w przydatne funkcje ułatwień dostępu. Pamiętam, że widziałem coś zwanego klawiszami trwałymi (Sticky Keys), który w teorii powinien działać w następujący sposób.

Aby utworzyć znak ę w języku polskim, naciśnij i przytrzymaj klawisz Alt, a następnie naciśnij literę e.

Klawisze trwałe działają w sposób pozwalający na jednokrotne naciśnięcie klawisza, np. Alt. To go aktywuje i sprawia, że zachowuje się tak, jakby był przytrzymywany innym palcem. W ten sam sposób możesz dwukrotnie nacisnąć dany klawisz kontrolny (np. klawisz Alt), aby działał tak, jakby był zawsze wciśnięty, podobnie jak zwykle zachowuje się klawisz Caps Lock. Umożliwi to wpisanie więcej niż jednego znaku specjalnego w jednym przebiegu. Jeśli nie musisz już używać klawisza, naciśnij go ponownie (po raz trzeci), aby zwolnić go z funkcji klawisza trwałego.

Na tyle teorii.

Wydawało mi się to idealnym rozwiązaniem dla mojej znajomej, ale jest jeden problem: to nie działa! Przynajmniej nie tak, jak się spodziewałem.

Przetestowałem klawisze trwałe na macOS (Sonoma) i Windows (11) i działały zgodnie z oczekiwaniami. Jednak w systemie ChromeOS klawisze trwałe działały nieprawidłowo na różnych urządzeniach. Sprawdziłem Chromebooki zarówno z klawiaturą wbudowaną, jak i zewnętrzną, a także ChromeOS Flex na PC.

Postanowiłem zbadać tę sprawę.

Po przeczytaniu więcej na ten temat zdałem sobie sprawę, że my, jako użytkownicy, nadmiernie uprościliśmy kilka rzeczy w oparciu o nasze doświadczenie.

Powszechnie wiadomo, że naciśnięcie lewego klawisza Alt w połączeniu z F4 wymusza zamknięcie aplikacji lub okna. I odwrotnie, w polskim układzie klawiatury naciśnięcie prawego klawisza Alt z e powoduje wyświetlenie litery ę.

Klawisz umieszczony po lewej stronie spacji to zwykły klawisz Alt. Drugi klawisz, po prawej stronie, zwykle nosi nazwę Alt Gr (lub Alt Graph). Ten klawisz Alt Gr odpowiada za wywoływanie znaków specjalnych charakterystycznych dla różnych języków, co jest szczególnie przydatne dla tych, którzy nie korzystają z angielskiego układu klawiatury.

Gdy na Chromebooku (ChromeOS lub ChromeOS Flex) włączona jest funkcja klawiszy trwałych, lewy i prawy klawisz są błędnie rozpoznawane jako zwykłe klawisze Alt.

Podejrzewałem, że może to być problem tylko w przypadku klawiatur zewnętrznych, ale sprawdziłem też wbudowaną klawiaturę markowego Chromebooka. Zawiera on także klawisz AltGr po prawej stronie spacji.

Podczas pisania przy użyciu zwykłych kombinacji klawiszy lub przy użyciu wielu palców prawy klawisz Alt działa poprawnie jako klawisz AltGr. Jednakże, gdy funkcja klawiszy trwałych jest włączona, prawy Alt jest traktowany jak zwykły klawisz Alt i w ten sposób jest podświetlany.

Potwierdzają to powiadomienia na ekranie, które pojawiają się w lewym górnym rogu ekranu, gdy włączone są klawisze trwałe i naciśnięty jest odpowiedni klawisz, jak pokazano poniżej.

Powiadomienie o klawiszach trwałych po naciśnięciu w ChromeOS Flex

Oto myląca część: zrzut ekranu pokazuje opcję altgr, mimo że Chromebook traktuje zarówno pojedyncze, jak i podwójne naciśnięcia lewego lub prawego klawisza Alt jak standardowy klawisz Alt podczas gdy klawisze trwałe są włączone. Jest to sprzeczne z tym, co jest wyświetlone na samej klawiaturze.

Kiedy aktywowałem klawiaturę ekranową, poprawnie pokazywała ona klawisz AltGr umieszczony po prawej stronie spacji, tak jak powinna wyglądać klawiatura fizyczna.

Jeśli klawisze trwałe mają działać z AltGr, to jak właściwie możemy ich używać razem?

W swoich poszukiwaniach znalazłem stronę keyjs.dev, która pozwala wykryć, jaki klawisz został naciśnięty.

Kiedy naciskam lewy klawisz Alt, otrzymuję odpowiedzi e.key=Alt i e.code=AltLeft. Jednak gdy nacisnę prawy klawisz Alt (klawisz AltGr), otrzymuję komunikat e.code=AltRight, ale nadal e.key=Alt. Prawdopodobnie w tym miejscu pojawia się zamieszanie z klawiszami trwałymi.

Po tej informacji znalazłem dyskusję na Reddit, w której ktoś chciał utworzyć niestandardowy układ klawiatury rosyjskiej za pomocą AltGr< /kbd> dla znaków cyrylicy. Sugeruje to, że możliwe może być dodanie niestandardowych układów do ChromeOS.

Część jego kodu wygląda następująco:

var AltGr = { PLAIN: "plain", ALTERNATE: "alternate" };
var Shift = { PLAIN: "plain", SHIFTED: "shifted" };

var lut = {
"KeyE": { "plain": {"plain": "ш", "shifted": "Ш"}, "alternate": {"plain": "щ", "shifted":"Щ"}, "code": "KeyE"},
};

Ten kod definiuje znaki tworzone przez różne kombinacje klawiszy: naciśnięcie samego klawisza e, naciśnięcie e z AltGr i naciśnięcie e z Shiftem.

W moim scenariuszu będzie to wyglądać następująco:

var lut = {
"KeyE": { "plain": {"plain": "e", "shifted": "E"}, "alternate": {"plain": "ę", "shifted":"Ę"}, "code": "KeyE"},
};

Chociaż rozwiązaniem jest utworzenie niestandardowego układu, należy pamiętać, że klawiatura sama poprawnie rozpoznaje AltGr podczas tworzenia symbolu ę. Problem polega na tym, że Sticky Keys traktują AltGr jako zwykły klawisz Alt, gdy jest włączony.

Po zwróceniu się o pomoc do Zespołu Google ds. ułatwień dostępu (Google Accessibility Team) postanowiłem bliżej przyjrzeć się temu problemowi, czekając na jego odpowiedź.

Z innej dyskusji na Reddicie wygląda na to, że ChromeOS używa e.code do rozróżniania lewego i prawego klawisza Alt. Pozostaje pytanie: dlaczego klawisze trwałe nie rozpoznają odpowiedniego Alt (który w rzeczywistości jest AltGr) i nie wykorzystuje go poprawnie?

Czy istnieje sposób zmodyfikowania e.code=AltRight tak, aby klawisze trwałe rozpoznawał go jako AltGr?

Przeszukałem oficjalne repozytorium Google GitHub z dodatkowymi klawiaturami dla ChromeOS. Szukając wystąpień AltGr, znalazłem je w niektórych językach.

Znalazłem coś interesującego w układzie klawiatury bepo, który jest przeznaczony do zoptymalizowanego pisania po francusku:

function updateAltGrState(keyData) {
  altGrState = (keyData.code == "AltRight") ? ((keyData.type == "keydown") ? AltGr.ALTERNATE : AltGr.PLAIN)
                                              : altGrState;

Znalazłem podobne odniesienia do użycia AltGr w Esperanto i Dvorak (zarówno w układzie lewo-, jak i praworęcznym), a także niektórych rozszerzonych funkcjonalnościach w układzie UK Extended.

W pliku composekey/background.js zauważyłem wpis:

// Domyślnie zachowywany jest modyfikator: w przeciwnym razie domyślny klawisz tworzenia AltRight koliduje z klawiszem AltGr w układach międzynarodowych.
keepModifier: true,

Na podstawie tego odkrycia zajrzałem do Compose Key dla systemu operacyjnego Chrome, aby zobaczyć, co robi.

Oto, czego się dowiedziałem z informacji o Compose Key…

To rozszerzenie zamienia prawy klawisz Alt (klawisz wyzwalający można konfigurować) w Compose key na różnych układach klawiatur angielskich, w tym w USA, Kanadzie i Wielkiej Brytanii.

Sugeruje to, że potrzebny jest kolejny krok, aby włączyć funkcjonalność AltGr. Samo dodanie układu, np. angielskiego (brytyjskiego) z Dvorakiem, nie rozwiązuje problemu polegającego na tym, że klawisze trwałe nie rozpoznają prawego klawisza Alt jako AltGr.

Znalazłem rozszerzenie Compose Key w sklepie Chrome Web Store i zdecydowałem się je zainstalować.

Jak czytamy:

To rozszerzenie dodaje do systemu operacyjnego Chrome kilka układów klawiatury z Compose key.

Nie napawałem się optymizmem, gdy przeczytałem jeden z komentarzy:

Nie działa już w wersjach Chrome OS i Chrome OS Flex Wersja 99.0.4844.94

I komentarz był słuszny.

Instrukcje dotyczące włączania metody wprowadzania Compose Key wskazują ustawienia, które już nie istnieją w ten sam sposób.

ComposeKey Początkowa konfiguracja

Na szczęście udało mi się znaleźć niezbędną metodę wprowadzania w menu ustawień.

Dodaj metodę wprowadzania ComposeKey

Miałem nadzieję, że po wylogowaniu się i ponownym zalogowaniu zgodnie z zaleceniami powiadomienie ekranowe dotyczące klawiszy trwałych w końcu poprawnie rozpozna AltGr. Niestety tak nie było.

Ponieważ nie otrzymałem jeszcze odpowiedzi od zespołu Google ds. ułatwień dostępu, postanowiłem zadać to pytanie gdzie indziej.

Zacząłem poszukiwania na forum społeczności Chromium. Tam stało się jasne, że wygląda to na błąd w samym systemie.”

Zgodnie z zaleceniem utworzyłem śledzony błąd (#325633307), aby zobaczyć jego postęp. W międzyczasie powiadomiłem także e-mailem Zespół Google ds. ułatwień dostępu o otwartej sprawie, na wypadek gdyby zespół chciał być na bieżąco informowany.

Czekając na odpowiedź, zdecydowałem się przetestować klawisze trwałe z różnymi metodami wprowadzania języka. Zainstalowałem kilka i obserwowałem ich zachowanie. Niestety żaden z nich nie zgłosił aktywacji AltGr po naciśnięciu prawego klawisza Alt Gr na klawiaturze.

Na razie jestem w ślepym zaułku. Może później coś wymyślę.

 <script async delay="https://dariusz.wieckiewicz.org/g/serve.js?client=ca-pub-5380116874441486"
      crossorigin="anonymous"></script>
 <ins class="adsbygoogle"
      style="display:block; text-align:center;"
      data-ad-layout="in-article"
      data-ad-format="fluid"
      data-ad-client="ca-pub-5380116874441486"
      data-ad-slot="9220966978"></ins>
 <script>
      (adsbygoogle = window.adsbygoogle || []).push({});
 </script>

Mimo że wykryty błąd nie poczynił żadnych postępów, otrzymałem dalszą wiadomość od zespołu Google ds. ułatwień dostępu. Poprosili o dodatkowe informacje, które pomogą im rozwiązać problem.

W międzyczasie mój śledzony błąd zyskał popularność w zespole Google i po miesiącu został rozwiązany.

Zespół wyraźnie rozumie problem i rozpoczął pracę nad rozwiązaniem.

Ich dochodzenie zidentyfikowało pierwotną przyczynę problemu. Do celów testowych zaimplementowano potencjalną poprawkę, która została zintegrowana z wersją rozwojową ChromeOS 125.0.6380.0.

Nie mogę jeszcze przetestować poprawki. Chociaż mój laptop ma system operacyjny Chrome w wersji Dev Channel, jest on w wersji 124.

Zakładając, że poprawka się powiedzie, zastanawiam się, ile czasu zajmie osiągnięcie stabilnej wersji ChromeOS. Obecnie wersja stabilna to 122, Beta to 123, a Dev to 124.

Czas poczekać.

Wreszcie nadszedł ten dzień! Moje urządzenie zostało zaktualizowane do wersji rozwojowej 125.0.6398.0. Po ponownym uruchomieniu chciałem sprawdzić, czy problem rozpoznawania AltGr został w końcu naprawiony.

I rzeczywiście!

Powodzenie! Przy włączonej funkcji klawisze trwałe naciśnięcie prawego klawisza Alt (AltGr) powoduje teraz wyświetlenie w powiadomieniu komunikatu altgr, zgodnie z oczekiwaniami.

Naprawia klawisze trwałe w ChromeOS 125 z działającym AltGr

Szybki test z pewną kompozycją tekstu to potwierdza: poprawka działa doskonale!

Wow, jestem pod wielkim wrażeniem, że poważnie podeszli do mojego problemu i tak go rozwiązali! Na początku nie byłem pewien, czy tak się stanie, ale zespół Google naprawdę się spisał.

Ponownie odwiedziłem witrynę keyjs.dev, aby potwierdzić poprawkę. Teraz naciśnięcie prawego klawisza Alt (AltGr) zwraca e.key=AltGraph i e.code=AltRight. Poprzednio wyświetlało tylko e.key=Alt i e.code=AltRight.

Chociaż z radością ogłaszam, że problem został rozwiązany, moja znajoma niestety nadal boryka się z tym problemem.

Poprawka jest obecnie w wersji 125, natomiast stabilna wersja ChromeOS to 123 (dwie wersje później). Zapytałem zespół o możliwość wcześniejszego przeniesienia tej poprawki na kanał stabilny, zamiast czekać na oficjalne wydanie wersji 125.

Chociaż backport może być mało prawdopodobny, zawsze istnieje szansa. Tymczasem musimy poczekać na stabilną wersję.

Bez obaw! Przynajmniej zostało to naprawione, a to będzie duża poprawa w pisaniu dla mojej znajomej.

Komentarze
Kategorie