Tôi có thể sắp xếp lại phím Caps Lock để phát âm thanh không?


16

Tôi đang cố gắng sử dụng lại khóa phím Caps vô dụng cho thứ gì đó hữu ích vào ngày 16.04 MATE. Tôi đã đi qua

setxkbmap -option ctrl:nocaps

để vô hiệu hóa nó, nhưng nó có thể được ánh xạ lại để phát / tạm dừng VLC không? Cảm ơn câu trả lời của bạn!


Tôi không nghĩ rằng nó sẽ hoạt động .... vì một số lý do ... ví dụ, tôi nghĩ linux coi capslock như một công cụ sửa đổi chứ không phải là một khóa riêng biệt. Đó có lẽ sẽ là lý do tại sao bạn không thể liên kết nó trong VLC. Ngoài ra, nếu bạn tắt nó, nó sẽ bị hủy kích hoạt. Nhưng bạn có thể chơi xung quanh dòng lệnh và cố gắng liên kết nó vlc --key-play-pause <key-string>, nhưng tôi đã không tìm thấy một chuỗi mà VLC chấp nhận là capslock ...
Robert Riedl

1
Tôi đã cài đặt dconf-editorthử một vài thứ, cài đặt xdotoolthử một vài thứ và cuối cùng xbindkeysvà thử một vài thứ. Vào cuối bài tập không có kết quả này, nút tạm dừng / phát bàn phím của tôi bị hỏng VÀ nút phát / tạm dừng màn hình của riêng tôi bị mờ đi và âm nhạc sẽ không phát. Tôi đã làm điều này vào ngày 16.04 vì vậy đã khởi động lại vào ngày 18.04 để xác nhận mọi thứ vẫn hoạt động và đó là phần mềm hack đã làm điều đó. Điều may mắn duy nhất là tôi chỉ chơi nhạc qua điện thoại Android chứ không phải PC. Chỉ cần một người đứng đầu để người khác cẩn thận và ghi lại những gì bạn làm cho máy của bạn tốt hơn tôi.
WinEunuuchs2Unix

1
@pbhj Cảm ơn vì tiền boa. Tôi bằng cách nào đó đã xoay sở để phát / tạm dừng hoạt động trở lại với nút trên màn hình và nút tạm dừng / phát bàn phím trong Ubuntu 16.04. Tôi chỉ muốn cảnh báo mọi người về những cạm bẫy có thể xảy ra khi thử nghiệm các tiện ích bàn phím cấp thấp này.
WinEunuuchs2Unix

1
2BFrank: Hãy chắc chắn chấp nhận một trong những câu trả lời nếu nó giải quyết được vấn đề của bạn. Vì có tiền thưởng cho câu hỏi này, việc để lại câu trả lời không được chấp nhận (và không trao giải thưởng bằng tay) sẽ chỉ trao một nửa số tiền thưởng cho @Sebastian Stark, vì câu trả lời của anh ta được bình chọn cao nhất.
Nonny Moose

1
@NonnyMoose Cảm ơn vì nhận xét đó. Tôi sẽ để nó tự động trả lời câu trả lời được chấp nhận hoặc tổng số phiếu cao nhất, nhưng tôi không biết rằng nó đã giảm một nửa giải thưởng, vì vậy tôi sẽ tự trao giải thưởng cho tổng số phiếu cao nhất trong khoảng hai giờ nếu không có câu trả lời nào được chấp nhận
Chai T. Rex

Câu trả lời:


11

evtest và dbus

Đây là một phiên bản liên quan đến một tập lệnh nhỏ chạy trong nền. Một vài bước dễ dàng cần được thực hiện:

  • Cài đặt chương trình evtest : sudo apt install evtest. Chương trình này có thể giải mã và in các sự kiện thô từ /dev/input/hệ thống phân cấp của thiết bị.

  • Thêm tài khoản người dùng của bạn vào nhóm input. Đăng xuất và đăng nhập lại. (Điều này là cần thiết bởi vì chúng tôi sẽ đọc từ một số thiết bị bên dưới /dev/input/, thông thường chỉ có thể được thực hiện bởi root hoặc người dùng trong nhóm input. Chúng tôi có thể chạy tập lệnh dưới dạng root, nhưng sau đó chúng tôi sẽ phải tìm cách cho người dùng biết nó là ai ví dụ dbus cần nói chuyện với.)

  • Vô hiệu hóa khóa capslock như bạn đã làm hoặc sử dụng tùy chọn Mate tương ứng. Nó cũng sẽ hoạt động nếu bạn ánh xạ khóa capslock thành ctrl, giống như nhiều người làm.

  • Lưu trữ tập lệnh sau ở đâu đó, ví dụ $HOME/bin/capshackvà làm cho tập lệnh thực thi:

    #!/bin/bash
    
    KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd
    EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1"
    
    toggleVLC () {
            dbus-send \
                --type=method_call \
                --dest=org.mpris.MediaPlayer2.vlc \
                /org/mpris/MediaPlayer2 \
                org.mpris.MediaPlayer2.Player.PlayPause
    }
    
    evtest "$KEYBOARD" | \
    while read line
    do
        if [[ "$line" == *"$EVENT" ]]
        then
            toggleVLC
        fi
    done
    

Kịch bản trên sẽ lắng nghe các sự kiện bàn phím của bạn và thực hiện lệnh khi nhấn phím capslock. Lệnh đang chạy đang sử dụng dbus để gửi một sự kiện phát / tạm dừng đến một phiên bản VLC đang chạy. Bạn có thể phải điều chỉnh KEYBOARDbiến để trỏ đến bàn phím thực của mình, nhưng có khả năng giá trị trên sẽ hoạt động.

Nếu bạn thích hàm toggleVLC () được gọi khi bạn giải phóng khóa capslock, bạn có thể thay đổi EVENTbiến trong tập lệnh sao cho nó kết thúc bằng value 0thay vì value 1.

Ngoài ra, có thể đối với bạn mã khóa của khóa capslock khác với 58. Bạn có thể kiểm tra điều này bằng cách chạy evtest, xem đầu ra khi bạn nhấn capslock và điều chỉnh biến EVENT cho phù hợp. Bạn thậm chí không phải khớp với mã khóa và đặt EVENT đơn giản thành (KEY_CAPSLOCK), value 1.

Thay vì sử dụng tập lệnh evtest và ở trên, bạn có thể sử dụng thd từ gói triggerhappy (một cái gì đó giống như thd --dump /dev/input/*sẽ cho đầu ra tương tự) nhưng tôi thấy rằng ít giáo dục hơn một chút.

Bây giờ chúng tôi tạo một đơn vị systemd người dùng để bắt đầu tập lệnh tự động trong nền:

  • Tạo hệ thống phân cấp người dùng: mkdir -p $HOME/.config/systemd/user

  • Thêm văn bản sau vào tập tin $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • Cho phép đơn vị dịch vụ bạn vừa thực hiện: systemctl --user enable capshack

  • Bắt đầu dịch vụ: systemctl --user start capshack

Từ giờ bạn sẽ có thể chuyển đổi phát / tạm dừng trong VLC bằng phím capslock. Kịch bản nền sẽ được tự động bắt đầu khi bạn đăng nhập.

kích hoạt Hạnh phúc

Như đã đề cập, bạn cũng có thể sử dụng gói triggerhappy để làm điều này. Đây là phương pháp ưa thích cho những người muốn tìm hiểu ít hơn với hệ thống và thích một giải pháp vững chắc hơn.

  • Thêm người dùng vào inputnhóm như trên

  • Cài đặt gói: sudo apt install triggerhappy

  • Thêm cấu hình cho triggerhappy để ~/.config/thd/capslock.conf:

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
    
  • Chạy thd như thế này: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • Làm cho thd chạy cho người dùng của bạn theo cách tương tự như được mô tả cho capshack.

  • Đảm bảo rằng bạn chỉ có một trong các phương thức được đề cập (capshack hoặc thd) đang chạy, để không tăng gấp đôi chuyển đổi mà mỗi phím bấm.

Tôi đã thử nghiệm tất cả điều này vào ngày 18.04 theo phiên chuẩn và người bạn đời 16.04. Nhưng về mặt lý thuyết nó cũng hoạt động trong môi trường đường bộ hoặc với các môi trường máy tính để bàn khác.


@ WinEunuuchs2Unix cảm ơn bạn đã đề cập. Cá nhân tôi thích phong cách dài dòng hơn của mệnh đề if / then / other đầy đủ: Nó rõ ràng hơn, dễ mở rộng hơn và nó không có xu hướng tạo ra các dòng quá dài. Mặc dù trong trường hợp này nó thực sự sẽ không quan trọng lắm.
Sebastian Stark

Tôi đồng ý về các dòng quá dài. Gần đây tôi đã điều chỉnh phong cách mã hóa thành hai dòng với dòng đầu tiên [[ test ]] && \ và dòng thứ hai thụt vào bốn khoảng trống <command>để chạy thử nghiệm tích cực. Tôi đồng ý toàn tâm về khả năng đọc vì đề xuất của tôi là xa lạ với hầu hết các ngôn ngữ lập trình.
WinEunuuchs2Unix

điều đó thật tuyệt ! Mặc dù tôi nghĩ rằng nó có vẻ triggerhappylà con đường để đi, vì evtestthực sự là một chương trình gỡ lỗi :)
Robert Riedl

vâng, evtest for learning, the for doing :)
Sebastian Stark

... Dù sao đối với tôi, mã khóa 58 là mvậy, do đó kịch bản không hoạt động. Tôi khuyên bạn nên kiểm tra xmodmap -pke | grep Caps_Locktrước khi sử dụng tập lệnh này để đảm bảo mã khóa là chính xác.
Nonny Moose

9

Trong Ubuntu 16.04 sau khi dành hàng giờ để tìm hiểu và giải quyết vấn đề dconf-editorxbindkeystôi đã tìm thấy một giải pháp cực kỳ dễ dàng:

  • Thiết lập rất nhanh trong 2 phút
  • Chỉ cần cài đặt xdotool
  • Không có kịch bản cần thiết
  • Caps lock vẫn được nhận dạng nhưng không chuyển đổi trường hợp chữ cái
  • Hoạt động với Cài đặt phím tắt tùy chỉnh bàn phím Ubuntu

Nếu bạn cần XF86AudioPlayhỗ trợ Gnome bạn cần xdotool(không cần cho VLC như OP quy định):

sudo apt install xdotool

Bây giờ đây là phần khó khăn. Mỗi lần bạn nhấn Caps LocKphím để chuyển nhạc giữa Phát và Tạm dừng, chữ in hoa cũng bật và tắt.

Sử dụng phương pháp này để tắt Caps Lock bật / tắt trong khi vẫn giữ phím hoạt động:

setxkbmap -option caps:none

Máy nghe nhạc tuân thủ Gnome

Sau đó, trong Ubuntu 16.04, hãy vào Cài đặt >> Bàn phím >> Phím tắt >> Phím tắt tùy chỉnh :

âm thanh tạm dừng-phát phím tắt.png

  • Đặt tên thànhAudio Play
  • Đặt lệnh thànhxdotool key XF86AudioPlay
  • Sau đó bấm vào Applynút

Sau khi thêm tùy chọn mới, phím tắt được gán sẽ đọc là Vô hiệu hóa . Nhấp vào Vô hiệu hóa và khi được nhắc nhập phím để gán Caps LocKphím.


Máy nghe nhạc như VLC

Thực hiện theo các bước cho Gnome trong phần trước nhưng đối với lệnh sử dụng thay thế:

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

VLC sẽ không nhận ra các phím phương tiện: Làm cách nào để các phím phương tiện bàn phím hoạt động với VLC trên toàn cầu? ngay cả khi được tích hợp vào bàn phím. Do đó, lối tắt bàn phím tùy chỉnh đến XF86AudioPlay là vô dụng xdotool.


Đặt phím tắt tùy chỉnh từ dòng lệnh

Câu hỏi này thảo luận về cách đặt phím tắt tùy chỉnh từ dòng lệnh: Làm cách nào để đặt phím tắt tùy chỉnh từ thiết bị đầu cuối?


Vô hiệu hóa khóa mũ vĩnh viễn

Bước tiếp theo là thực hiện điều này setxkbmap -option caps:noneliên tục trên các lần khởi động lại. Kết quả của Google trong câu trả lời này của Terdon: Lưu cài đặt setxkbdmap :

Một cách dễ dàng là thêm lệnh vào $HOME/.profiletệp của bạn (bạn có thể tạo nó nếu nó không tồn tại):

setxkbmap -option caps:none

Điều đó sẽ làm cho nó chạy mỗi khi bạn đăng nhập.

Lưu ý rằng bạn nên sử dụng $HOME/.profilechứ không phải $HOME/.bash_profile, $HOME/.bashrchoặc một số tệp tương tự khác. Điều này là do cài đặt này phải được đọc bởi người quản lý đăng nhập của bạn.


Đơn giản, thanh lịch, thực hiện công việc: Câu trả lời hoàn hảo cho tôi!
Fabby

@Fabby Vâng, tôi phải thừa nhận rằng nó dễ dàng để thiết lập và kiểm tra và không yêu cầu mucking ở mức độ thấp hoặc liên tục chạy các tập lệnh. Tôi đã trải qua bốn lần thử khác nhau trước khi vấp phải phương pháp này. Vẫn sẽ không gọi nó là hoàn hảo nhưng CẢM ƠN! . Nếu họ cho tôi trở lại châu Âu một lần nữa, tôi sẽ mua cho bạn một pint.
WinEunuuchs2Unix

Nó có hoạt động với Wayland không?
danzel

@dabzel Tôi sợ Wayland không hoạt động setxkbmap -option caps:none. Chương trình tiện ích được cài đặt tuy nhiên Wayland tiếp tục chuyển đổi giữa chữ hoa và chữ thường. Bạn có thể đăng một câu hỏi riêng về cách khiến Wayland tôn trọng setxkbmap.
WinEunuuchs2Unix

3

Câu trả lời này đã được thử nghiệm trên Ubuntu MATE 16.04.4 LTS trong máy ảo (nhưng bàn phím là bàn phím USB khi vượt qua, do đó sẽ không tạo ra sự khác biệt). Nó cũng không yêu cầu thêm phần mềm và có thể được thực hiện khi cài đặt vanilla mà không cần cài đặt bất kỳ gói nào và nó vẫn tồn tại giữa các lần khởi động.

Remap Caps Lock

  1. Chỉnh sửa tập tin /usr/share/X11/xkb/symbols/pcdưới dạng root. Hãy cẩn thận để không mắc lỗi ở đây (như quên dấu phẩy) vì bạn có thể không thể sử dụng bàn phím của mình nữa nếu bạn làm vậy. (Đoán xem tôi đã học được những gì khó khăn ?;)

  2. Nhận xét ra dòng

        key <CAPS> {    [ Caps_Lock     ]   };
    

    bằng cách đặt hai dấu gạch chéo về phía trước ( //) ở đầu của nó.

  3. Thêm vào bên dưới dòng sau:

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. Nhận xét ra dòng

        modifier_map Lock   { Caps_Lock };
    

    theo cách tương tự như trên.

  5. Khởi động lại.

Lưu ý: (ghi có vào danzel để chỉ ra điều này) Các bản cập nhật cho gói xkb-datacó thể ghi đè lên tệp này. Một phương pháp hợp lý an toàn để ngăn chặn điều này là chuyển hướng sử dụng dpkg-divert. (Tôi nói "hợp lý an toàn" vì nguồn ngược dòng cho tệp này đã không được sửa đổi trong ba năm.)

Phương pháp thay thế

Vô hiệu hóa thủ công phím Caps Lock trong cài đặt bố cục bàn phím của bạn, sau đó sử dụng cách tiếp cận trong câu trả lời này để thêm ánh xạ lại khóa của riêng bạn.

Các vấn đề?

Phím khóa mũ của bạn không còn khóa mũ và nó đã được ánh xạ lại thành Phát / Tạm dừng tại thời điểm này. Bây giờ bạn có thể phát và tạm dừng nhạc trong VLC. Nếu nó hoạt động vào thời điểm này, bạn có thể bỏ qua phần còn lại của các hướng dẫn này.

Tuy nhiên, khi tôi dùng thử, VLC không phản hồi với phím Phát / Tạm dừng.

Đảm bảo phím tắt được đặt đúng

  1. Mở Phím tắt (Hệ thống → Tùy chọn → Phần cứng → Phím tắt)

  2. Đảm bảo rằng "Phát (hoặc Phát / Tạm dừng)" được đặt thành "XF86AudioPlay"

  3. Nếu không, nhấp vào phần "Phím tắt" và nhấn phím Phát / Tạm dừng mới của bạn để đặt phím tắt. ảnh chụp màn hình hữu ích

  4. Nếu nó vẫn không hoạt động, khởi động lại một vài lần cho biện pháp tốt. (Đó thực sự là những gì đã sửa nó cho tôi.)


Điều này có thể can thiệp vào các xkbtùy chọn, đặc biệt là caps:...những người. Ngoài ra, nó có thể được ghi đè bằng cập nhật hệ thống.
danzel

Thật vậy, nó có thể. Điểm tốt về cập nhật hệ thống, mặc dù. Tôi sẽ thêm một lưu ý về điều này trong câu trả lời của tôi. Cảm ơn vì bạn đã phản hồi!
Nonny Moose

Kính gửi tất cả, wow !! Xin lỗi đã afk một thời gian :-) và bây giờ tôi đang khám phá tất cả những nỗ lực mà tất cả các bạn đã đưa vào giải pháp !! Sẽ thử trả lời @ WinEunuuchs2Unix và giữ cho bạn được đăng. Cảm ơn, LLAP !!
2BFrank

@ 2BFrank Vì tò mò, bạn đã tìm thấy câu trả lời nào hiệu quả chưa?
Nonny Moose

1

Cài đặt xbindkeys, xcapeplayerctl . Đảm bảo rằng xcape(ánh xạ CapsLocktới khóa dự phòng như Alt+F12bởi xcape -e 'Caps_Lock=Alt_L|F12) và playerctlđược tự động khởi động khi đăng nhập và thêm vào tệp ~/.xbindkeysrchai dòng

"playerctl play-pause"
  Alt + F12

0

Biến khóa capslock của bạn thành phím phát / tạm dừng

Giải pháp này sẽ ánh xạ lại mã scancode của khóa capslock của bạn sang một mã khóa khác trong trình điều khiển đầu vào kernel, trong trường hợp này là phát / tạm dừng.

Ưu điểm

  • Không cần sửa đổi các tệp hệ thống hiện có (chỉ cần tạo một tệp mới)
  • Các ứng dụng sẽ không biết rằng đó thực sự là một phím capslock nhưng nghĩ rằng một phím phát / tạm dừng thực sự đã được nhấn
  • Không cần tắt capslock, không có khả năng làm rối xkbcấu hình

Nhược điểm

  • Phải được thực hiện cho từng bàn phím riêng lẻ (tùy theo tình huống, cũng có thể là một lợi thế)

Điều kiện tiên quyết

  • evtest (có thể được cài đặt qua sudo apt-get install evtest)

Thủ tục

Trong một thiết bị đầu cuối, chạy sudo evtestvà chọn bàn phím của bạn. Nếu không có đầu ra khi bạn nhấn phím, bấm Ctrl+ Cvà thử một thiết bị khác. Hãy nhớ số sự kiện thiết bị bạn đã chọn, chúng tôi sẽ cần nó sau đó. Nhấn phím capslock. Một số dòng như sau sẽ xuất hiện:

Event: time 1529406021.187148, -------------- SYN_REPORT ------------
Event: time 1529406021.218427, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1529406021.218427, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0

Chúng ta cần giá trị từ MSC_SCANdòng trước KEY_CAPSLOCKdòng. Trong ví dụ trên, đây sẽ là 70039, nhưng scancode trên bàn phím của bạn có lẽ khác.

Bây giờ hãy chạy lệnh sau, nhưng thay thế X bằng số sự kiện thiết bị bạn đã sử dụng cho evtestlệnh:

grep "" /sys/class/input/eventX/device/id/*

... điều này sẽ đầu ra bustype, product, vendorversioncủa bàn phím.

Tạo một file có tên 65-keyboard-custom.hwdbtrong /etc/udev/hwdb.d/(quyền root yêu cầu) với nội dung sau:

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 KEYBOARD_KEY_[scancode]=playpause

...Ở đâu

  • [xe buýt], [nhà cung cấp], [sản phẩm] và [phiên bản] có chính xác 4 ký tự và chữ cái cần viết hoa
  • [scancode] phải viết thường
  • các evdev:...dòng có không gian trước
  • các KEYBOARD_KEY...dòng có đúng một không gian trước

Ví dụ:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Cuối cùng, biên dịch cấu hình mới vào cơ sở dữ liệu phần cứng:

sudo systemd-hwdb update

Nếu bạn muốn áp dụng các thay đổi ngay lập tức, hãy thông báo cho udev:

sudo udevadm trigger

Nếu bạn muốn hoàn nguyên các thay đổi, chỉ cần xóa tệp bạn đã tạo và khởi động lại.

Bạn có thể tìm thấy thông tin chi tiết hơn trong câu trả lời ban đầu của tôi về chủ đề này.


@Nonny Moose đó là lý do tại sao tôi viết "Phải hoàn thành cho từng bàn phím". Thêm vào đó, bạn có thể chỉ định bao nhiêu bàn phím tùy thích, vì vậy bạn thực sự chỉ phải làm điều này cho mỗi bàn phím mới bạn mua. Mặt khác, bạn có thể bỏ qua bàn phím nếu muốn, ví dụ như vì nó đã có phím phát / tạm dừng vật lý.
danzel

... Chà, tôi đã không chú ý. Tôi đứng sửa.
Nonny Moose

0

Có thể sử dụng xbindkeyshoặc XTEbạn có thể làm điều đó. Nhưng trước tiên hãy chắc chắn về Mã khóa là gì, bạn có thể xem mã cho khóa capslock bằng cách sử dụng lệnh xevtrong thiết bị đầu cuối và nhấn nó (bạn có thể thấy mã khóa của bất kỳ nút chuột hoặc chuột nào, bao gồm cả chuột chơi game). Với mã khóa của capslock và nút play trong tay, bạn có thể chỉnh sửa tệp xbindkeys confi và đặt các thay đổi của mình vào đó. sử dụng touch ~/.xbindkeysrcđể tạo tập tin cấu hình (nếu hệ thống không tự động tạo nó) và nano ~/.xbindkeysrcchỉnh sửa nó. Tôi đã sử dụng nó vào tháng trước và đây là một bài kiểm tra. hãy xem những liên kết này có thể rất hữu ích cho bạn.

https://help.ubfox.com/community/MultidiaKeys

https://gist.github.com/jbonney/5743509

Ánh xạ lại một nút từ chuột chơi game của tôi sang phím bàn phím

https://matmunn.me/post/binding-volume-control-mouse-buttons-ub Ubuntu /

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.