Xmodmap vĩnh viễn trong Ubuntu 13.04


72

Tôi không thể chạy xmodmap khi đăng nhập trong Ubuntu 13.04. Tôi đã tìm kiếm xung quanh, bao gồm cả trong Askubfox và tất cả các câu trả lời tôi thấy không hoạt động.

Tôi có một tệp có tên .Xmodmap trong thư mục nhà của tôi có chứa ánh xạ mong muốn. Nếu tôi chạy nó bằng tay thì nó hoạt động tốt, vì vậy không có lỗi ở đó. Để làm cho nó chạy khi khởi động, tôi đã thử:

  1. Sử dụng khác nhau .xinitrccó chứa một trong các lệnh sau:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. Sử dụng .Xresourcesthay vì .xinitrcvới các biến thể tương tự.

  3. Đặt nó làm ứng dụng khởi động.

Không có cái nào ở trên hoạt động trong Ubuntu 13.04 (64-bit). Tôi cũng đã thấy một vài ý tưởng về việc thay đổi toàn cầu ánh xạ bàn phím, nhưng hầu hết chúng không thể áp dụng được trong Ubuntu 13.04 (tức là các tệp tương ứng không tồn tại ở nơi được chỉ định) và dù sao tôi cũng không muốn chạm vào cài đặt chung.

Câu trả lời:


81

Ubuntu không còn sử dụng nữa xmodmapmà thay vào đó là sử dụng xkb(theo như tôi hiểu, điều này tạo điều kiện cho bố trí bàn phím trên mỗi cửa sổ, trong số những thứ khác).

Các tập tin bản đồ toàn hệ thống nằm trong

/usr/share/X11/xkb/symbols/

Các bản đồ dường như được tải theo thứ bậc, với pcbản đồ là gốc và bất kỳ ngôn ngữ nào (ví dụ en) là con của gốc.

Trong trường hợp cụ thể của tôi, tôi đã hoán đổi vật lý Page Up với Home và Page Down với End trên bàn phím của mình, vì vậy tôi rất thô lỗ thực hiện các thay đổi đối với pcbản đồ toàn hệ thống , như sau:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

LƯU Ý: Để buộc Xorg sử dụng bản đồ bàn phím mới của bạn, bạn có thể phải xóa các bản đồ được biên dịch sẵn (* .xkm) trong

/var/lib/xkb/

và sau đó khởi động lại Xorg.

Có nhiều tài nguyên khác nhau xkb, nhưng tài nguyên này có liên quan đến Ubuntu.


9
Kể từ Ubuntu 14.04, đây là cách dễ nhất để trao đổi khóa. Bạn CÓ THỂ làm cho xmodmap chạy khi đăng nhập bằng cách thêm nó vào Ứng dụng khởi động, nhưng nếu bạn tạm dừng, ngủ đông, v.v. bạn phải tự khởi động nó hoặc tạo tập lệnh daemon khởi động.
holocronweaver

Tôi có thể sắp xếp lại các phím tùy thuộc vào sửa đổi : unmodified shift altgr* shift+altgr. Nhưng những gì về left altsuper key?
Farzher

7
Tôi không nghĩ câu đầu tiên của bạn là đúng. Bạn có nguồn nào cho nó không? Tôi thấy khó tin rằng "cách Ubuntu" ánh xạ lại các phím của bạn sẽ chỉnh sửa bản đồ bàn phím từ đó xkb. Bên cạnh việc khó hiểu, điều này có vấn đề là bản đồ tùy chỉnh của bạn bị xóa khi xkbđược cập nhật.
Mateus Araújo

1
Điều đó nói rằng, đây là phương pháp đáng tin cậy duy nhất mà tôi đã tìm thấy về các phím ánh xạ lại trên Ubuntu.
Mateus Araújo

1
Có một cách tốt hơn. Tôi biết mã khóa chính xác mà tôi muốn ánh xạ, nhưng mã khóa 217 thậm chí không được liệt kê trong xkb. Tôi thậm chí không thấy một cách để thêm mã khóa mới.
Jonathan

13

Đối với tôi, cấu hình xkb quá phức tạp nếu bạn muốn sắp xếp lại 1 hoặc 2 phím theo cách không có sẵn trong Cài đặt hệ thống. Ngoài ra, giải pháp nên duy trì ở phía người dùng, không chỉnh sửa '/ usr / share / X11 / xkb / biểu tượng /' v.v. Buộc tải 'xmodmap ~ / .Xmodmap' bằng Ứng dụng khởi động chỉ hoạt động cho đến khi bạn tạm dừng, thay đổi người dùng hoặc thay đổi cách bố trí bàn phím. Vì vậy, như holocronweaver gợi ý, với đoạn mã tôi tìm thấy, tôi đã tạo một tập lệnh python để được tải khi khởi động phiên, tải lại '~ / .Xmodmap' khi cần.

Kiểm tra báo cáo lỗi # 1243642 (nhận xét # 6) và tải xuống tại đây .


1
Vẫn hoạt động kể từ ngày 15.10 :-) Cảm ơn!
lalomartin

Liên kết đến kịch bản huyền thoại này dường như bị phá vỡ. Ai đó có thể đưa nó lên github?
Epigene

Tuyệt vời - và chỉ có câu trả lời khả thi! Làm việc trong 16.04. Để làm cho nó hoạt động trong Python3 đã thay đổi: "nhập gobject" thành "từ gi.reposeective nhập GObject dưới dạng gobject".
Craig Hicks

1
@Epigene - liên kết hiện có
Craig Hicks

Khen ngợi! Một thiên tài làm việc xung quanh.
dmanexe

6

Tôi gặp vấn đề này trong Ubuntu 14.04 và tìm thấy giải pháp ở đây . Rõ ràng, Ubuntu không thể cấu hình bàn phím ngay sau khi đăng nhập, nhưng muộn hơn một chút. Vì vậy, nếu bạn thêm một lệnh

sleep 4 && xmodmap ~/.Xmodmap &

để ~/.bash_profilesau đó nó sẽ làm việc (nó làm cho tôi).

EDIT: Điều này dường như chỉ hoạt động sau khi đăng nhập, không phải sau khi khởi động. Tôi sẽ phải điều tra việc này sau.


1
Bất kỳ may mắn nào thiết lập điều này để chạy sau khi đình chỉ / ngủ đông?
Jonathan

Không, thật không may, tôi thậm chí không thể làm cho nó hoạt động sau khi khởi động. Vì vậy, mỗi khi tôi khởi động, tôi mở một thiết bị đầu cuối và gõ xmodmap ~/.Xmodmap:(
dremodaris

lưu ý rằng trên Ubuntu 16.04, bạn nên sử dụng .profile
Vitor Abella

5

Chuyển đổi Caps Lockthành Esccho vimsử dụng

Đây là biến thể của một kịch bản khởi động ánh xạ chính. Nó chuyển đổi Caps Lockthành Escbất kỳ bàn phím nào để sử dụng với vi, vimhoặc gvim.

Không giống như câu trả lời của q4w56 , câu trả lời này không sử dụng bất kỳ while; dovòng lặp vô hạn nào . Nếu không, một lõi của CPU lõi kép của tôi sẽ đạt 42% cứ sau 5 giây, làm giảm nghiêm trọng việc sạc pin máy tính xách tay của tôi.

#!/usr/bin/env bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"

Lưu nó dưới dạng một kịch bản. Làm cho tập tin thực thi với chmod +x. Thêm tên tập lệnh và vị trí vào Session and Startup → Application Autostart(trong Xubfox).

Hành vi bàn phím cho người dùng này sẽ vẫn tồn tại thông qua khởi động lại và đăng xuất, nhưng không tạm dừng. Sự kiên trì thông qua việc đình chỉ có thể đạt được , nhưng thật không may chỉ ở cấp độ hệ thống, không sẵn sàng ở cấp độ người dùng.

Lý do cho việc ánh xạ lại bàn phím này

Trong thế giới điện toán ngày nay, có rất ít sử dụng còn lại cho Caps Lockkhóa. Nói chung, người ta không nên sử dụng TẤT CẢ CAPS nhờ cả hai nghi thức mạngtách biệt phần trình bày và nội dung . Ngoài ra, việc vô tình nhấn Caps Lockphím trong khi chỉnh sửa văn bản vimkhông phải lúc nào cũng được ghi chú ngay lập tức, nhưng luôn luôn dẫn đến hành vi khá khó chịuvim hơn nữa. Vô hiệu hóa Caps Locktất cả các khóa cùng nhau và tái sử dụng nó như một cách dễ dàng để đạt được Esckết quả chính trong một chiến thắng kép để vimsử dụng.


Thay thế chức năng của Caps Lockphím có thể là một trình tiết kiệm thực tế cho vimngười dùng trên MacBook của Apple mà không cần Escchìa khóa .
Serge Stroobandt

3
Nó tốt hơn để remap capslockđể ctrl. Điều này giải quyết được nhiều vấn đề hơn, và trong Vim, sau đó, bạn có thể sử dụng capslock+ [cho EscXin lỗi để can thiệp, nhưng tôi cảm thấy bắt buộc phải đề xuất điều này.
dùng907860

Chính xác thì đình chỉ là gì? Có phải đó là đóng nắp trên máy tính xách tay của bạn? Sau đó, giải pháp của bạn không hoạt động? Làm thế nào để bạn sử dụng vim sau khi bạn đóng nắp trên máy tính xách tay của bạn?
Marko Avlijaš

@ MarkoAvlijaš How do you use vim after you close the lid on your laptop?Bằng cách mở nắp tất nhiên!
Serge Stroobandt

Haha tôi không bao giờ đoán được điều đó Tôi có nghĩa là khóa mũ không được ánh xạ để thoát nữa sau đó?
Marko Avlijaš

3

Tôi cũng gặp vấn đề với Ubuntu 16.04 với fcitx và đã có giải pháp trên wiki fcitx , nhưng nó cần fcitx có 4.2.7 trở lên

  • touch ~/.Xmodmap
  • viết cấu hình
  • khởi động lại và fcitx sẽ cố gắng tải nó tự động

Cũng có một số lời giải thích cho lý do.


1
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Videonauth

@Videonauth Tôi đã sửa đổi câu trả lời của mình
Bluethon

Cảm ơn bạn rất nhiều :) Tôi vẫn để lại bình luận của tôi ở đây để những người trong bài đánh giá có thể thấy bạn đã thay đổi điều gì đó.
Videonauth

@Videonauth đây là câu trả lời đầu tiên của tôi và tôi kém tiếng Anh, vì vậy tôi đã phạm một số lỗi. và thx cho lời khuyên của bạn. : P
Bluethon

Không có gì. Cung cấp câu trả lời là một cách tốt để đóng góp cho cộng đồng.
Videonauth

3

Câu trả lời của @ Daniel chỉ cho tôi cách đúng, nhưng tôi muốn mở rộng về nó.

Hoạt động với tôi trên Linux Mint 17.2 và Ubuntu 16.04.

Tôi đã thử tất cả các vòng xoắn mà tôi có thể nghĩ ra để tiếp tục sử dụng xmodmap, nhưng tất cả đều thất bại khi hệ thống chuyển sang chế độ ngủ. Điều tương tự thậm chí giữ cho các kịch bản ứng dụng khởi động sử dụng setxkbmaptrong trường hợp * settings-daemon (đối với tôi là xfce4) chạy muộn hơn so với tập lệnh --- và thứ tự thực sự không thể bị ảnh hưởng.

Những gì tôi cuối cùng đã đưa ra có các thành phần sau đây:

1) Viết một tập tin ánh xạ bàn phím tối thiểu cho /usr/share/X11/xkb/symbols. Cho phép gọi tệp mylayoutNó có thể đơn giản như

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic chỉ là một cái tên, chúng ta sẽ gặp lại nó sau.
  • Các name[Group1]tương tự chỉ là một cái tên có vẻ như, nhưng nó sẽ không đóng vai trò sau.
  • include "us"bao gồm bàn phím đơn giản cho chúng tôi. Trên thực tế uslà một tập tin khác trong cùng thư mục. Đây là cách bố trí bàn phím mà chúng tôi đang điều chỉnh. Chọn một cái khác khi cần thiết. Lưu ý: không có dấu chấm phẩy để kết thúc dòng này.
  • Các keydòng là một thích ứng của bàn phím, nhiều hơn có thể làm theo. Có <AE03>thể được tìm thấy trong các tập tin dưới /usr/share/X11/xkb/keycodes. Sử dụng xevchương trình để tìm ra rằng phím "3" có mã khóa 12 và trong tệp mã khóa, Xfree86nó được ánh xạ tới <AE03>.
  • Cuối cùng, một lệnh khác includeđể kích hoạt tùy chọn bàn phím khác, trong trường hợp này tôi muốn có phím Alt bên phải là phím shift cấp 3, tức là phím cho phép truy cập vào sterlingdấu hiệu tôi đã xác định ở trên. level3chỉ là một tên tệp trong cùng một thư mục với ralt_switchmột phần của nó. Có một cái nhìn xung quanh và chọn những gì bạn cần bao gồm.

2) Tôi không đặt mylayoutthư mục hệ thống. Thay vào đó tôi chỉ tạo một liên kết mềm từ thư mục hệ thống đến một thư mục theo ý thích của tôi để thấy ngay rằng đây không phải là phần mềm chứng khoán.

3) Hơn nữa tôi đã không sửa chữa evdev.xml, một lần nữa để tránh những rắc rối cập nhật. Nhưng điều này sẽ là cần thiết để tìm mylayout trong trình chỉnh sửa cấu hình bàn phím (đối với xfce4 là vậy xfce4-keyboard-settings). Thay vào đó tôi đã sử dụng xfce4-settings-editorvà thay đổi keyboard-layout->XkbLayoutthành mylayout(tên tệp) và XkbVariantthành basic(xem ở trên). Sau đó, mylayout/basiccũng được hiển thị trong trình chỉnh sửa cài đặt bàn phím. Một mục trong evdev.xmldường như chỉ cần thiết để có thể chọn bố cục.

Bằng cách này, các cài đặt bàn phím hiện tồn tại chế độ ngủ và khởi động lại.

Nhiều nền tảng có thể được tìm thấy ở đây: http://www.charvolant.org/~doug/xkb/html/node5.html .

Một cách tiếp cận khác để khắc phục sự cố chế độ ngủ (không tự mình thử), có thể tìm thấy ở đây: https://www.vinc17.net/unix/xkb.en.html .

CẬP NHẬT: đã làm việc với Mint 18.3 cùng lúc tôi thay đổi cài đặt trong xfce4-settings-Editor như được mô tả ở trên.

CẬP NHẬT: Với 18.04, gdm3 là trình quản lý hiển thị và XFCE4 là trình quản lý cửa sổ, có vẻ như ~ / .Xmodmap được đọc lại và các cài đặt dường như tồn tại tạm dừng. (Tôi hiếm khi sử dụng hệ thống treo và tôi không bao giờ chắc chắn máy tính xách tay đang ở chế độ nào.)


2

CÁCH MẠNG

Một bản cập nhật vào đầu năm 2018 đã phá vỡ tính bền bỉ - tự động tải lại sơ đồ bàn phím sau khi tạm dừng hoặc ngủ đông. Vì các phương thức sử dụng tập lệnh /etc/pm/s ngủ.d đã ngừng hoạt động (không dùng nữa?), Chỉ còn lại cách mới hơn, sử dụng / lib / systemd / system-ngủ và kịch bản hơi khác (bắt đầu hoạt động trên keymap!).

Vì vậy, bài đăng này được cập nhật lên phương pháp mới hơn để duy trì và để bao gồm tải sơ đồ bàn phím ban đầu bình thường, cũng bắt đầu hoạt động. Quy trình chuyển đổi tệp .Xmodmap thành .xkbmap vẫn không thay đổi.

Lưu ý đây là giải pháp cho mỗi người dùng. Để biết câu trả lời cho mỗi thiết bị, hãy xem cách áp dụng sơ đồ bàn phím cho một thiết bị . Phương pháp này có thể được điều chỉnh để sử dụng ở đây.

Đầu tiên sửa đổi tệp .Xmodmap như mong muốn. Đây là những chỉnh sửa trực tiếp dễ dàng hơn so với các tệp .xkbmap. Khi nó được tải:

xmodmap .Xmodmap

sau đó chuyển đổi thành tệp .xkb:

xkbcomp $ HIỂN THỊ $ HOME / .xkbmap

Để tự động tải khi khởi động, hãy mở Ứng dụng khởi động, nhấp vào Thêm và trên dòng lệnh nhập:

xkbcomp /home/user/.xkbmap ": 0"

("người dùng" được thay thế bằng tên người dùng thực tế.) Đối với Tên, có thể nhập Tải bản đồ bàn phím. Thêm bình luận nếu muốn và nhấn Save.

Giờ đây, sơ đồ bàn phím sẽ tải mỗi khi hệ thống khởi động, nhưng sẽ không tồn tại trạng thái treo hoặc ngủ đông. Đối với điều này, tạo một tệp mới trong / lib / systemd / system-ngủ, có lẽ được đặt tên là 60_xkbmap, chứa:

#!/bin/sh
case $1/$2 in
  pre/*)
    # Place pre-suspend commands here
    exit 0
    ;;
  post/*)
    # Place post-suspend commands here
    export DISPLAY=":0"
    export XAUTHORITY="/home/user/.Xauthority"
    su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null"
    ;;
esac

( Tham khảo ) Như trên, thay thế "người dùng" bằng tên người dùng thực tế.

Sơ đồ bàn phím bây giờ sẽ tự động tải và vẫn tồn tại. Ghi chú:

  • Áp dụng cho bản phát hành LTS hiện tại, 16.04, và có thể cả những bản sau này nữa.
  • Lấy từ bài 14 của chủ đề lỗi liên kết ở trên.
  • Nhận xét trước đó áp dụng cho bài viết gốc.

Tôi đang thử phương pháp này ngay bây giờ và khi tôi khởi động thiết bị đầu cuối, tôi nhận được một loạt các thông báo như vậy: Cảnh báo: Không có ký hiệu nào được xác định cho <AB11> (mã khóa 97) Cảnh báo: Không có ký hiệu nào được xác định cho <JPCM> (mã khóa 103) Cảnh báo: Không có ký hiệu nào được xác định cho <I120> (mã khóa 120) ...... nhiều hơn nữa không chắc chắn hậu quả của việc đó sẽ là gì. Có ai biết không?
mất em bé

Phương pháp này mặc dù các cảnh báo được đề cập ở trên hoạt động nhưng chỉ là tạm thời - sau một thời gian, ánh xạ bằng cách nào đó bị lãng quên và siêu khóa trở lại chức năng mặc định của nó. Vì vậy, tôi sẽ thử cách khác - Tôi sẽ sử dụng lại các phím tắt chỉnh sửa cơ bản trên máy Mac của mình để sử dụng phím Điều khiển thay vì phím Lệnh và xem liệu nó có hoạt động không. Tôi chỉ muốn các lệnh cut-copy-paste-undo-redo của mình giống nhau trên Mac và Ubuntu. Tôi rất thất vọng khi menu tìm kiếm bật lên trên Ubuntu mỗi khi tôi cố gắng sao chép hoặc dán thứ gì đó.
mất em bé

1

Điều này cũng khiến tôi vấp ngã khi nâng cấp từ Ubuntu 12.04 lên 13.04.

May mắn thay, cài đặt này bây giờ (hoặc có lẽ luôn luôn có thể truy cập dễ dàng) trong các tùy chọn Bàn phím và có thể được thay đổi bằng một vài cú nhấp chuột.

  1. Chuyển đến Cài đặt hệ thống > Bố cục bàn phím > Tùy chọn ...
  2. Trong Tùy chọn bố trí bàn phím, bấm vào mũi tên để hiển thị các tùy chọn vị trí phím Ctrl .
  3. Đặt dấu kiểm vào trong Hoán đổi Ctrl và Caps Lock .

Ở đó bạn đi: Điều khiển trái và Caps Lock đã chuyển vị trí.

Đừng quên xóa ~/.Xmodmapmột khi bạn đã thực hiện thay đổi.


Điều này có thể bị hạ thấp bởi vì nó không giải quyết được xmodmap, nhưng đây thực sự là cách tôi phát hiện ra rằng sử dụng Gnome Tweak có thể là lý do khiến một số ánh xạ của tôi hoạt động kỳ lạ.
dragon788

Tôi không thấy điều này trong 16.04, điều này vẫn có thể chứ?
chrismarx

1
@chrismarx Không, họ đã gỡ bỏ nó. Ngày nay (16.04) tôi đặt XKBOPTIONS="ctrl:swapcaps"trong /etc/default/keyboard.
chiếu

0

Tôi thấy việc thêm tập lệnh này để khởi động thỏa mãn:

while true;do 
    xmodmap -e "keycode 87=Prior"
    xmodmap -e "keycode 88=Next"
    sleep 5
done

Tôi đã thử sử dụng xmodmap ./Xmodmap, nhưng mỗi khi nó được thực thi, độ trễ đáng chú ý sẽ xảy ra.


4
while; doNên tránh sử dụng bất kỳ vòng lặp vô hạn . Nó khiến cho một lõi của CPU lõi kép của tôi đạt 42% cứ sau 5 giây, làm giảm nghiêm trọng việc sạc pin máy tính xách tay của tôi!
Serge Stroobandt
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.