[ArcoLinuxB + QTILE][XKBMAP] Βοήθεια για προσθήκη ελληνικών στο πληκτρολόγιο

Το qtile αρνείται να προσθέσει την ελληνική γλώσσα και δεν δουλεύει η εναλλαγή γλωσσών είτε χρησιμοποιώντας την συντόμευση alt+shift, είτε κλικάροντας στο αντίστοιχο εικονίδιο στην μπάρα εργασιών. Να σημειωθεί πως στην οθόνη καλωσορίσματος όπου πρέπει να πληκτρολογίσω τον κωδικό μου, υπάρχει η επιλογή χρήσης ελληνικών χαρακτήρων, και γίνεται η εναλλαγή μόνο αν κλικάρω πάνω στην ένδειξη γλώσσας πληκτρολογίου. Σας παραθέτω παρακάτω το 00-keyboard.conf:

Section “InputClass”
Identifier “system-keyboard”
MatchIsKeyboard “on”
Option “XkbLayout” “us, gr”
Option “XkbModel” “pc105”
Option “XkbOptions” “grp:alt_shift_toggle”
EndSection

Τέλος να ενημερώσω πως η εντολή setxkbmap gr αλλάζει το πληκτρολόγιο στα ελληνικά προσωρινά (γιατί αν πατήσω στο keyboardlayout indicator γυρίζει στα αγγλικά χωρίς επιστροφή).

Επίσης το setxkbmap "gr, us" -option "grp:alt_shift_toggle" βάζει τα ελληνικά όμως το alt+shift δεν δουλεύει και συμπεριφέρεται παρόμοια με το setxkbmap gr αν επιστρέψω στα αγγλικά.

Αν γράψω setxkbmap "us, gr " -option "grp:alt_shift_toggle" δεν γίνεται τίποτα.

EDIT: Screenshot με τα εγκατεστημένα πακέτα σχετικά με το xkb.

Ποιο iso χρησιμοποίησες για την εγκατάσταση?(Δώσε πλήρες όνομα του αρχείου)

Καλησπέρα, το iso είναι το arcolinuxb-qtile-min-v19.07.9.iso

Χρησιμοποιείς κάποια third party μπάρα πάνω ή είναι απλά θέμα μορφοποίησης?
Το setxkbmap έπρεπε να δουλεύει by default και σωστά, απλά η εντολή μετά από επανεκκίνηση δεν κρατάει τις επιλογές αποθηκευμένες. Για να το κάνει αυτό μπορείς, να αποθηκεύσεις την εντολή μέσα στο αρχείο :
~/.config/qtile/scripts/autostart.sh
και να τρέχει αυτόματα με κάθε εκκίνηση του qtile
Μπορείς να post-αρεις των κώδικα του kbdlayout indicator που χρησιμοποιείς?
Επίσης η εντολή :
setxkbmap -query | grep layout
τι σου βγάζει?

1 Like

Η μπάρα είναι θέμα μορφοποίησης.
Στο αρχείο autostart.sh αν βάλω setxkbmap -layout us,gr τότε θα υπάρχουν μόνο τα αγγλικά, ενώ αν βάλω setxkbmap -layout gr,us τότε θα ξεκινήσει ο υπολογιστής με τα ελληνικά στο πληκτρολόγιο, όμως αν το αλλάξω κάνοντας κλικ στο keyboard indicator πάει στα αγγλικά και δεν ξαναγυρίζει όσες φορές και αν το πατήσω. Παρόλα αυτά η εντολή setxkbmap -query | grep layout επιστρέφει οτι υπάρχουν τα δύο layout us, gr.
Ο κώδικας για το widget είναι:

 widget.KeyboardLayout(
           	font="Noto Sans",
            fontsize=12,
            foreground=colors[19],
            background=colors[16],
            padding = 0,
           	),

Εκεί τώρα πρόσθεσα το configured_keyboards = ['us', 'gr'], και το αποτέλεσμα είναι να αλλάζει σωστά το layout κάθε φορά που κάνω κλικ στο kbd indicator. Τώρα το μόνο που μένει είναι να δουλέψει και το alt+shift .

Το πρόβλημα έγκειται στην υλοποίηση του widget.KeyboardLayout() . Δηλαδή με το που κάνεις κλικ πάνω στο εικονίδιο για να αλλάξεις γλώσσα, κάνει χρήση της εντολής setxkbmap με μόνη μεταβλητή το επόμενο layout. Σα να τρέχεις το παρακάτω :

 setxkbmap "gr"

Έτσι η συνεδρία σου χάνει το πρώτο layout και δεν μπορείς με alt+shift να γυρίσεις στα αγγλικά.
Οι λύσεις που βλέπω, προς το παρόν είναι 2 :

  1. Είτε θα κάνεις χρήση μόνο του indicator , δηλαδή θα αλλάζεις γλώσσα με το ποντίκι (σπάσιμο νεύρων ξέρω…)
  2. Είτε θα βγάλεις το widget, και θα κάνεις χρήση της εντολής :

setxkbmap “us,gr” -option “grp:alt_shift_toggle,grp_led:scroll”

μέσα στο autostart.sh. Έτσι δεν θα έχεις ένδειξη στην οθόνη, αλλά αν τυχαίνει να έχεις led-ακι για το Scroll Lock στο πληκτρολόγιο, θα ανάβει όταν είσαι σε ελληνικά.
Αν βγάλω παραπάνω άκρη, θα σου στείλω.

Η προσθήκη στο autostart.sh όντως βοήθησε ώστε να δουλέψει το alt+shift , αν και όπως ήταν αναμενόμενο το indicator ήταν περιττό.

Δοκίμασα βέβαια να προσθέσω μία συντόμευση στις ρυθμίσεις του qtile:

Key(["mod1","shift"], "l", lazy.widget["keyboardlayout"].next_keyboard())

Έτσι ο συνδιασμός alt+shift+l αλλάζει το layout και συνεργάζεται (σχεδόν) σωστά με το indicator. Το πρόβλημα εδώ είναι πως αν είμαι στα ελληνικά αντί για l υπάρχει λ, οπότε δεν δουλεύει η συντόμευση. Έκανα κάποιες προσπάθεις να παραλέιψω το l ή να βάλω στην θέση του το None ή "" όμως το qtile πέταγε error.

Μήπως χτυπάει error γιατί υπάρχει ήδη σαν συντόμευση? Αν ναι, κάντε την commented out.

Ευχαριστώ για την βοήθεια, η λύση ώστε να δουλέψει το alt+shift είναι η εξής;

Key(["mod1"], "Shift_L" , lazy.widget['keyboardlayout'].next_keyboard())

Έτσι δουλεύουν τώρα όλα σωστά.

Πίστευα πως το qtile θα ήταν λίγο πιο απλό μια που έχω ασχοληθεί με python και linux στο παρελθόν… Είναι λίγο περίεργο που αγνοεί εντελώς τα .conf αρχεία του συστήματος και θέλει να δηλώνεις τα πάντα στις δικές του ρυθμίσεις… Πάμε για άλλα τώρα σε καινούριο νήμα.

1 Like

Και το δικό μου ίδιο είναι:

/etc/X11/xorg.conf.d/00-keyboard.conf

Section “InputClass”
Identifier “system-keyboard”
MatchIsKeyboard “on”
Option “XkbLayout” “us,gr”
Option “XkbModel” “pc105”
Option “XkbOptions” “grp:alt_shift_toggle”
EndSection

Το pamac ειναι manjaro?

% pacman -Qsq keyboard
kbd
libkeybinder2
libkeybinder3
libxkbcommon-x11
libxkbfile
libxklavier
xf86-input-keyboard
xkeyboard-config
xorg-setxkbmap
xorg-xkbcomp

Μήπως έχεις κάποιο πρόγραμμα του desktop για shortcuts που υπερβαίνουν την λειτουργία του alt shift και την χρησιμοποιούν για κάτι άλλο. Ίσως να δοκίμαζες κάποια άλλη σύνθεση κουμπιών αντί του alt-shift να δεις αν διορθώνεται. Για να εφαρμοστεί η αλλαγή στα .conf του /etc/X11 πρέπει να ξαναξεκινήσει το X.

Λοιπόν απ’ότι κατάλαβα το qtile θέλει μία ειδική διαδικασία για να προσθέσεις επιπλέον γλώσσες πέραν των αγγλικών. Πώς γίνεται αυτο ? Δεν χρειάζεται να πειράξεις /etc/X11/xorg.conf.d/00-keyboard.conf, το αφήνεις δηλαδή όπως είναι με τα αγγλικά μόνο και χωρίς κάποια συντόμευση για την εναλλαγή μεταξύ των layouts.

Αυτό που πρέπει να γίνει είναι να ανοίξουμε το αρχείο ~/.config/qtile/config.py και να προσθέσουμε ένα widget, το KeyboardLayout με παράμετρο configured_keyboards = ['us', 'gr']. Άρα με αυτόν τον τρόπο εμφανίζεται ένας keyboard layout indicator που με κάθε κλικ πάει στο επόμενο layout.

Πώς γίνεται όμως να αλλάζουν οι γλώσσες ενώ στο keyboard.conf υπάρχει μόνο η αγγλική ? Η απάντηση κρύβεται στον πηγαίο κώδικα της KeyboardLayout όπου αν παρατηρήσουμε υπάρχει μία μέθοδος next_layout() που βρίσκει το επόμενo layout με βάση αυτό που δηλώσαμε στο coinfig.py και έπειτα η keyboard(self, keyboard) τρέχει την εντολή π.χ. setxkbmap gr.

Ωραία, τώρα μας μένει να φτιάξουμε και την συντόμευση π.χ. alt+shift ώστε να αλλάζουμε τα layouts χωρίς να χρειάζεται κάθε φορά να κάνουμε κλικ στον indicator. Άρα πρέπει να επιστρέψουμε πίσω στο
~/.config/qtile/config.py και εκεί που έχει τα shortcuts να προσθέσουμε ένα δικό μας, το:
Key(["mod1"], "Shift_L" , lazy.widget['keyboardlayout'].next_keyboard())
Όπου το mod1 αναφέρεται στο alt και Shift_L στο αριστερό shift.

Και τώρα τελειώσαμε! Επί της ουσίας 3 γραμμές κώδικα είναι η λύση αλλά αν δεν το ξέρεις θα παιδευέσαι 3 μέρες…

Υ.Γ. : Γίνεται όπως πρότεινε και ο Maras να μην κάνω τίποτα απ’ολα αυτά και να ανοίξω το αρχείο ~/.config/qtile/scripts/autostart.sh, όπου θα πρέπει να προσθέσω το:
setxkbmap “us,gr” -option “grp:alt_shift_toggle,grp_led:scroll”
Όμως τότε δεν θα δούλευε το keyboard layout indicator. Σε κάθε περίπτωση όμως πρέπει να γίνονται οι αλλαγές μέσα από το configuration του qtile.

3 Likes

Ενδιαφερον, να προσθεσω για τερμιναλ/κονσολ

όπως αναφέρθηκε για οτιδήποτε στο Χ αυτό λειτουργεί:

$ setxkbmap gr

Στο console
# loadkeys gr

Αφού έχουν ενεργοποιηθεί οι γλωσσες στο /etc/locale.gen κι έχει τρέξει το # logale-gen αν δεν κάνω λάθος.

2 Likes