Tại sao các liên kết xmodmap của tôi liên quan đến AltGr chỉ hoạt động trên một số khóa?


12

Tôi muốn sắp xếp lại AltGR + Right_Windows của mình nhưng tôi không thể tìm ra cách. Bất kể tôi cố gắng gì, nhấn phím cửa sổ bên phải sẽ phát ra phím tên khi nhấn phím phải hoặc không.

Đây là nội dung của tệp xmodmap tôi đang thử nghiệm ngay bây giờ. Trong bàn phím của tôi, 38 là mã khóa cho "a", 48 là mã khóa cho aportrophe / doublequote và 134 là mã khóa cho phím windows bên phải.

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Khi tôi nhấn Right_Alt + dấu nháy đơn, nó sẽ xuất ra 5 nhưng Right_Alt + a và Right_Alt + Right_Windows cho 1 (cả khi nhấn alt phải và khi không) không phải là điều tôi muốn.

Bố cục bàn phím hiện tại của tôi là us(alt-intl)và alt bên phải rõ ràng được thiết lập để hoạt động như AltGr / Iso_Level3_Shift. Đầu ra của xmodmap -pmlà như sau:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Không biết chính xác chuyện gì đang xảy ra, nhưng nếu bạn chưa thực hiện, bạn có thể muốn chạy xevvà nhấn các tổ hợp phím khác nhau để xem phần cứng và lên đến cấp độ Xwindows có bắt đầu nhấn phím không.
Joe

Tôi đang gặp vấn đề tương tự. Tôi muốn sửa đổi dấu phẩy và dấu chấm để cũng hỗ trợ in dấu ngoặc kép tiếng Séc và tiếng Anh (“/ / /) mà tôi phải viết bằng cách sử dụng khóa soạn thảo. Tôi đang sử dụng us(cz_sk_de)bố trí bàn phím và xmodmap.
Pavel imerda

Giờ thì sao? Sẽ không thực tế khi lãng phí tiền thưởng khác cũng như không bắt đầu một câu hỏi mới khi câu hỏi này mô tả khá rõ vấn đề. Nó trông giống như một lỗi trong xorg nhưng tôi không tìm thấy bất kỳ tài liệu tham khảo nào. Câu trả lời hiện tại rõ ràng là sai mặc dù được tự động trao tặng.
Pavel imerda

Tôi đã kết thúc việc từ bỏ và sử dụng các tổ hợp phím khác nhau mà tôi biết là có công việc: / Tôi đồng ý rằng điều này trông giống như một lỗi nhưng tôi không biết hệ thống của nó liên quan đến đâu và báo cáo ở đâu ...
hugomg

Tôi tìm thấy một số thông tin ở đây ... blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html
Pavel imerda

Câu trả lời:


7

Sử dụng xmodmap để định cấu hình ánh xạ khóa riêng lẻ

Đã đến lúc viết ra kết quả nghiên cứu của riêng tôi.

Tôi nghĩ rằng tôi đã bỏ lỡ một cái gì đó trong xmodmap và nó chỉ là tài liệu không được tốt lắm và mọi người đang bối rối. Nhưng hóa ra thiết kế X.Org liên quan đến XKB và xmodmap chỉ là ngu ngốc.

Sử thi thất bại: xmodmap

Bạn có thể sử dụng xmodmap để xác định lại các ánh xạ hiện có miễn là những ánh xạ đó thực sự tồn tại trong bố cục bàn phím ban đầu của bạn. Trong trường hợp được mô tả trong câu hỏi, bạn không thể mở rộng hành vi của bất kỳ khóa nào để sử dụng AltGr. Bạn chỉ có thể thay đổi các từ khóa AltGr cho các mã khóa đã sử dụng AltGr.

Xem thêm: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Giải pháp thay thế: Mode_switch

Cách giải quyết này được mô tả trong câu trả lời của @ Ned64. Bạn có thể ánh xạ lại AltGrtừ ISO_Level3_Shiftđến Mode_switch.

Tôi đã sử dụng thành công dòng lệnh sau để ánh xạ lại AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

Nhược điểm là nó sẽ phá vỡ bố cục bàn phím hiện tại của bạn nhưng bạn có thể tạo lại tất cả các ánh xạ từng cái một bằng cách sử dụng xmodmapnhư @ Ned64 đã được đề cập.

Giải pháp thay thế: Bố trí bàn phím đã sửa đổi

Tôi đang sử dụng us(cz_sk_de)làm bố cục bàn phím và tôi đã cố gắng sửa đổi nó bằng cách thêm cấu hình cho các phím tôi muốn mở rộng.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(Trong phần xkb_symbols "cz_sk_de"của /usr/share/X11/xkb/symbols/us)

Chỉ cần đặt lại bố cục bàn phím để sử dụng phiên bản sửa đổi.

setxkbmap 'us(cz_sk_de)'

Bây giờ bạn có thể (1) gõ Séc và tiếng Anh dấu ngoặc kép và elip sử dụng sự kết hợp của ,, ., ShiftAltGrphím và / hoặc (2) remap những phím sử dụng xmodmapbây giờ mà chúng được định nghĩa.

Nhược điểm chính là setxkbmapdường như không hỗ trợ các vị trí tùy ý cho bố trí bàn phím và do đó bạn cần ghi vào cấu hình hệ thống thay vì thư mục chính của bạn.

Phần kết luận

Đây dường như là một ví dụ về thiết kế xấu của X.Org, trong đó ngay cả một điều tầm thường như ánh xạ mã khóa và kết hợp các sửa đổi thành biểu tượng hóa ra lại là một vấn đề. Các công cụ dường như không cung cấp một cách hợp lý để chỉ thay đổi ánh xạ khóa riêng lẻ trong cấu hình người dùng mà không có bất kỳ tác dụng phụ nào.


"Bạn không thể mở rộng hành vi của bất kỳ khóa nào để sử dụng AltGr" - có vẻ như đây là vấn đề! Cảm ơn.
hugomg

5

Bước một: Làm cho AltGr có thể sử dụng được

Tôi phát hiện ra rằng Khóa được sửa đổi AltGr chỉ hoạt động trên hệ thống của tôi nếu tôi cũng sắp xếp lại Khóa AltGr Mode_switch, như thế này:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

Nếu bạn có một bàn phím khác, bạn có thể cần phải thay thế 108bằng mã của mình, kiểm tra bằng cách nhập

xmodmap -pke | grep Alt_R

sau đó sử dụng số đó. (Khóa thường được gọi Alt_Rtrên các hệ thống tôi biết.)

Ngoài ra, điều này cũng có thể hoạt động nếu Alt_R chưa được gán cho thứ khác:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

Công cụ sửa đổi AltGr của bạn hiện sẽ phục vụ vị trí 3 (với Shift: 4) trong danh sách công cụ sửa đổi của bạn.

Bước hai: Gán các phím theo yêu cầu

Bạn có thể gán các biến thể AltGr cho bất kỳ phím nào trên bàn phím bạn muốn. Nếu bây giờ bạn có các khóa khác không tương ứng với mã mong muốn, bạn cần gán lại các khóa này giống như các khóa khác (những khóa bạn đã kiểm tra).

Bước ba: Chuyển đổi nó thành một kịch bản

Bây giờ chỉ cần thực hiện các xmodmaplệnh của bạn và viết tất cả (nhưng chỉ) sửa đổi vào bàn phím mặc định của bạn vào một tệp - nhanh hơn tải một bản đồ hoàn chỉnh. Bắt đầu tập lệnh này một lần sau mỗi lần đăng nhập và bất cứ khi nào sơ đồ bàn phím được thiết lập lại bởi một số quy trình.

Tôi đã thử nghiệm điều này rất nhiều năm qua, dưới Solaris, IRIX và Linux, và theo hiểu biết của tôi thì đây là giải pháp duy nhất giúp AltGr hoạt động - và nó đã hoạt động tốt với tôi trong hơn 20 năm.


1
Với điều này, phím cửa sổ bên phải bắt đầu hoạt động như "3" thay vì "1". Tuy nhiên, bây giờ tất cả các công cụ sửa đổi altgr hiện tại đã ngừng hoạt động (tôi đoán nó cần phải là "5" thay vì "3" để chúng hoạt động?)
hugomg

Cảm ơn vì đã thử nó. Xin vui lòng gửi xmodmap -pmxmodmap -pke | grep -w SOMECHANGEDKEYtrong tình huống này, cho một khóa không hoạt động nữa.
Ned64

(sau đó chúng tôi sẽ cần thêm công cụ sửa đổi mới bằng cách sử dụng xmodmaptheo đầu ra của bạn)
Ned64

xmodmap -pke | grep Alt_Rkhông trả lại bất kỳ kết quả nào trên hệ thống của tôi. Hệ thống của tôi là Lenovo ThinkPad X230 với Gentoo ổn định. Tôi cũng đã cố gắng nhưng grep -ikhông có kết quả.
Pavel imerda

Tôi đã thử nó và vấn đề là những lá thư có dấu us(cz_sk_de)đã ngừng hoạt động đối với tôi. Do đó, câu trả lời này không hiệu quả với tôi và sẽ không hiệu quả với nhiều người khác.
Pavel imerda

1

Rõ ràng, xmodmap không đọc AltGR mặc định, vì vậy, nó có thể bị giới hạn ở các bố cục bàn phím cụ thể, có thể đó là tất cả các bố cục không phải của Hoa Kỳ, dù sao đi nữa, vấn đề thực sự là bạn có thể thay thế bố cục bàn phím, một số người có thể không thực sự muốn làm điều đó vì họ cần sử dụng các ký tự đặc biệt trên bố cục mà họ đã quen (như bố trí bàn phím scandinavian có các ký tự như ðþæöáúíóåů, v.v.) sẽ gây khó khăn cho việc định cấu hình cho các bố cục bàn phím khác.

Bạn có thể chạy

xmodmap -e "keycode 108 = Mode_switch"

Để khởi động lại AltGR thành một cái gì đó xmodmap có thể hoạt động, và thực tế, lần gán thứ 3 của một keycoad sẽ xuất ra khi bạn nhấn AltGR ngay bây giờ, tuy nhiên nó sẽ phá vỡ hoàn toàn bố cục bàn phím ban đầu vì không có phím bấm AltGR nào hoạt động nữa với phím AltGR.

Tôi đã tìm thấy hai cách giải quyết không phá vỡ bố cục bàn phím hiện tại của tôi và không liên quan đến việc chuyển đổi bố cục , một là liên kết Mode_switch với một phím khác.

Khóa lý tưởng cho điều này là Super_R nằm ngay cạnh AltGR, mã khóa cho nó là 134. Tuy nhiên, không phải tất cả các bàn phím đều có chúng và trong trường hợp của tôi trên máy tính xách tay, tôi cũng không có nó, vì vậy tôi đã quyết định liên kết nó với cái cuối cùng chìa khóa còn lại mà tôi thực tế không bao giờ sử dụng, Quyền kiểm soát.

xmodmap -e "keycode 105 = Mode_switch"

Tôi có bố cục bàn phím vật lý của người Mỹ, nhưng cấu hình bố cục châu Âu và phím ít / lớn hơn / thanh (còn được gọi là ISO_Backslash, mặc dù điều đó không được nhận ra bởi chính xmodmap) thường nằm bên cạnh Z trên bàn phím như vậy. Tôi đã ràng buộc điều đó với Menu (135) nhưng nó có thể đóng vai trò thay thế cho R_Ctrl và Super_R

Đây là một sửa chữa bẩn tôi cho rằng.

Cách giải quyết thứ hai mất một chút thời gian để tìm ra. Sử dụng sxhkd (thay thế xbindkeys)

Nếu bạn thêm cái này vào ~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

AltGR của bạn sẽ hoạt động như bình thường, nhưng khi được nhấn, Mode_switch sẽ được bật (giống như khóa mũ, nhưng đối với Mode_switch) và bất kỳ phím xmodmap nào sử dụng nó sẽ bị khóa trong chế độ AltGR cho đến khi bạn nhấn lại AltGR để gỡ rối. Sẽ là một vấn đề đơn giản để tạo một kịch bản để tự động tháo gỡ nó khi khóa được phát hành nhưng những nỗ lực của tôi để làm điều đó khá là lỗi, để nói rằng ít nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.