Làm cách nào để chạy tập lệnh khi tôi chuyển đổi giữa các bố trí bàn phím


7

Tôi sử dụng nhiều hơn một bố cục bàn phím và tôi muốn tìm cách chạy tập lệnh khi tôi chuyển đổi giữa chúng.

Điều này có thể không?

Cho đến nay, tôi có thể gán một phím tắt cho một kịch bản như thế này:

#!/bin/bash

#switch between two layouts (English and Greek in this case)
current_layouts=$(gsettings get org.gnome.libgnomekbd.keyboard layouts)

if [ "$current_layouts" = "us" ]; then
    gsettings set org.gnome.libgnomekbd.keyboard layouts "['gr']"
else 
    gsettings set org.gnome.libgnomekbd.keyboard layouts "['us']"
fi

exec /path/to/another/script

Nhưng sử dụng phương pháp này, tôi chỉ có thể sử dụng phím tắt đó để chuyển giữa các bố cục và chỉ báo bàn phím sẽ biến mất khỏi menu trạng thái, điều không thoải mái.

Câu trả lời:


4

dconf watch có thể được sử dụng làm máy thu sự kiện, ví dụ (trong Ubuntu 13.10 / 14.04):

dconf watch /org/gnome/desktop/input-sources/current | xargs -L 2 sh -c "echo kbd layout changed" &

Đáng buồn thay, điều này không còn hoạt động với gnome 3.18 (Tôi nghĩ rằng nó phải làm với điều này vì vậy nó cũng ảnh hưởng đến các bản phát hành trước đó)
don_crissti

0

Tôi sẽ làm theo cách khác, chạy một kịch bản thay đổi bố cục. Bằng cách đó bạn có thể làm bất cứ điều gì khác mà bạn muốn với cùng một kịch bản. Thật không may, khá khó để tìm ra bố cục bàn phím hiện tại của bạn. Tôi đã tìm thấy không có cách tiếp cận nào hoạt động cho tất cả các phương pháp chuyển đổi bố cục. Vì một số lý do, có một sự khác biệt nếu bạn chuyển đổi bằng setxkbmaphoặc thông qua các phím tắt GUI.

Vì vậy, cách giải quyết của tôi là luôn luôn chuyển đổi bằng cách sử dụng setxkbmap. Tôi có một tập lệnh gọi setxkbmapvà tôi đã ràng buộc tập lệnh đó vào một phím tắt trong môi trường máy tính để bàn của tôi để tôi có thể chuyển đổi dễ dàng. Ví dụ dưới đây dành cho bố cục của Hy Lạp và Hoa Kỳ, bạn sẽ phải sửa đổi nó để phù hợp với thiết lập của mình:

#!/usr/bin/env bash
key=`xmodmap -pke | grep -w "59" | awk '{print \$NF}'` 
## If this is the "us" layout, that will return "less"
if [ $key == "less" ]; then
    setxkbmap gr
    ## Add other things to be done here
else
    setxkbmap us
    ## Add other things to be done here
fi

Cảm ơn cho nỗ lực của bạn, nhưng điều này không xa kịch bản của tôi. Sự khác biệt duy nhất: chỉ báo bàn phím hiện xuất hiện, nhưng chỉ có một bố cục duy nhất. Và vâng ... nếu có một cách để xác định bố cục bàn phím hiện tại (không phải tất cả chúng hoặc đầu tiên từ chúng như tôi thấy ở những nơi khác) sẽ tốt ...
Radu Rădeanu

@ RaduRădeanu Tôi biết, tôi đã thử vô số phương thức nhưng chúng không nhất quán. Kịch bản trong câu trả lời của tôi chỉ đơn giản là vô hiệu hóa chỉ báo bàn phím trên DE của tôi để nó còn tệ hơn nữa. Đó chỉ là cách duy nhất tôi biết để chạy tập lệnh khi thay đổi bố cục. Tôi không nghĩ là có thể nếu bạn sử dụng trình chuyển đổi bố cục GUI. Hãy cho tôi biết nếu bạn tìm thấy một giải pháp tốt hơn mặc dù!
terdon

0
gsettings monitor org.gnome.desktop.input-sources mru-sources \
        | xargs -L1 bash -c 'source /path/to/your/script.sh'
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.