Tại sao các lệnh xte này hoạt động trong terminal, nhưng không phải khi bị ràng buộc với xbindkeys?


18

xteLệnh này , khi tôi chạy nó trong một thiết bị đầu cuối, sẽ kích hoạt chế độ Expo:

xte 'keydown Super_L' 'key S' 'keyup Super_L'

Tuy nhiên, khi tôi đặt cái này vào tệp .xbindkeysrc của mình:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11

Không có gì xảy ra khi tôi nhấp vào nút. Các ràng buộc sau đây làm cho chữ X xuất hiện trong bảng điều khiển của tôi khi tôi nhấn nút 11:

"xte 'key X'"
  b:11

Vậy tại sao hội chợ triển lãm không hoạt động?


Đây là đầu ra dài dòng xbindkeys -n -vkhi nhấp vào nút 11:

Nhấn nút!
e.xbutton.button = 11
e.xbutton.state = 16
"xte 'keydown Super_L' 'key W' 'keyup Super_L'"
    m: 0x0 + b: 11 (chuột)
có màn hình 0 cho cửa sổ 2bb
Bắt đầu chương trình với cuộc gọi fork + exec
Phát hành nút!
e.xbutton.button = 11
e.xbutton.state = 16

Và không có gì xảy ra. Điều này có liên quan gì đến cách xbindkeysthực hiện lệnh không? (cuộc gọi ngã ba + thực hiện)


Cố gắng số hai.

expo.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

Thực thi tập lệnh này từ dòng lệnh kích hoạt Expo. Liên kết nó trong xbindkeys:

"sh ~/expo.sh"
  b:11

Nhấp chuột vào nút 11:

Nhấn nút!
e.xbutton.button = 11
e.xbutton.state = 16
"sh ~ / expo.sh"
    m: 0x0 + b: 11 (chuột)
có màn hình 0 cho cửa sổ 2bb
Bắt đầu chương trình với cuộc gọi fork + exec

Chẳng có gì xảy ra!


1
Bạn đang cố nhấn <Super> <S>? Tôi biết đôi khi xbindkeys + xte có thể kén chọn.
Seth

@Seth: Đúng. Bất kỳ cách để làm việc xung quanh sự kén chọn?
Hubro

1
Hãy thử 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Seth

@Seth: Không có gì khác biệt Tôi sợ :(
Hubro

Bạn đã khởi chạy lại xbindkeys sau khi bạn thực hiện các thay đổi? Đôi khi điều đó là cần thiết. Mục tiêu cuối cùng của bạn là mở tổng quan về không gian làm việc tôi đoán?
Seth

Câu trả lời:


17

Một giải pháp đơn giản hơn: thay vì chỉ sử dụng "b: 11" trong định nghĩa xbindkeys, hãy sử dụng "phát hành b: 11 +". Nó sẽ đợi cho đến khi bạn nhả nút để kích hoạt lệnh.

Thí dụ:

"sh ~/expo.sh"
  b:11 + release

2
Hubro nên quay lại đây và đánh dấu đây là câu trả lời chính xác ...
David Ljung Madison Stellar

7

Điều này rất kỳ lạ. Hóa ra nếu nút chuột của tôi vẫn được nhấn (chưa được phát hành) khi Super+Wtổ hợp phím được mô phỏng thì không có gì xảy ra. Tôi không biết ai sẽ đổ lỗi cho điều đó (có lẽ là Quế?). Tôi đã làm việc xung quanh nó bằng cách thêm một độ trễ ngắn vào xtelệnh:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

Bây giờ nó chờ 0,1 giây trước khi mô phỏng Super+S. Nếu tôi bấm và giữ nút chuột hơn so với 0,1 giây, không có gì xảy ra.

Đây là một câu trả lời giải pháp. Tôi rất thích một câu trả lời thích hợp.


Hubro, vui lòng xem câu trả lời được đánh giá cao hơn bởi user215129 và đánh dấu nó là chính xác
David Ljung Madison Stellar

1
@DavidLjungMadison Không. Nó thậm chí không phải là một câu trả lời cho câu hỏi của tôi, chỉ là một gợi ý cho một công việc.
Hubro

1
Tôi tự hỏi nếu bạn hiểu câu trả lời. Vấn đề là bạn đang cố gắng gửi các phím trong khi nút vẫn không hoạt động. Chờ phát hành nút có nghĩa là nó sẽ không gửi các phím cho đến khi nút được phát hành, do đó giải quyết vấn đề của bạn. Không phải là một cách giải quyết, đó là một lời giải thích về vấn đề và cách giải quyết nó.
David Ljung Madison Stellar

1
Sau đó, bạn vẫn không hiểu. Các vấn đề là bạn đang cố gắng để gõ phím trong khi nút là xuống, và bất cứ điều gì ra mắt Expo đang tìm kiếm Super-S, không BTN-2 + Super-S. Khắc phục sự cố của bạn một cách giải quyết vì nó không giải quyết được vấn đề bằng cách đảm bảo rằng nút này hoạt động và không hoạt động trong nhiều trường hợp. Giải pháp là (thường là trong trường hợp xử lý các sự kiện chuột) để chờ phát hành nút trước khi kích hoạt bất kỳ lệnh nào, điều này đảm bảo rằng nút không bị trộn với tổ hợp phím.
David Ljung Madison Stellar

2
Có thể xác nhận rằng câu trả lời user215129 thực sự không đúng và không trả lời câu hỏi. Thực hiện điều tra riêng của tôi về vấn đề này ngay bây giờ và trong trường hợp của tôi, việc thay đổi nó thành phát hành hoặc trì hoãn không phải là một lựa chọn vì tôi cần nó để thực hiện hành động trong khi nhấn nút, với hành động khác khi phát hành. Xem: Askubfox.com/questions/984054/ Mạnh
Giao diện người dùng Ethuil

2

Tôi phải đối mặt với cùng một vấn đề.

"xte 'key b'"

đã làm việc trong bàn điều khiển nhưng không phải trong tệp tham số xbindkeys. Tôi đã thay đổi b bằng mã keyym của anh ấy, sử dụng lệnh "xev" để lấy nó:

"xte 'key Ox62'"

Nó làm việc cho tôi


1

Thử với + Phát hành

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11 + Release

Điều đó có thể giúp.


1

Có vấn đề tương tự trong khi sử dụng keymapper sxhkcd. Hóa ra các phím tắt thực tế của bạn được phát hiện là vẫn đang được nhấn.

Có một số cách giải quyết:

  • tìm kiếm sự kiện phát hành
  • thêm sleep 0.2vào trước lệnh của bạn
  • sử dụng phím tắt với khóa trưởng
  • phát hành công cụ sửa đổi lối tắt của bạn trước chuỗi xte của bạn

Tuy nhiên, bạn không thể có được các hành động thời gian thực với điều đó =)

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.