شما هنوز به سیستم وارد نشده اید.

#1 2017-06-08 09:28:23

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

libinput-gestures و wayland

سلام.
همون طور که احتمالا میدونید libinput-gestures میتونه با کمک xdotool یه سری شرتکاتهای کیبورد رو بوسیله تاچپد اجرا کنه. بدین طریق میشه یک مولتی تاچ کامل با تاچپد داشته باشیم. اما متاسفانه xdotool در wayland کار نمیکنه و این طور که خوندم به دلیل مسائل سکیوریتی قرار هم نیست که کار کنه!
در توضیحات libinput-gestures در مورد wayland توضیحاتی نوشته که اون طور که من فهمیدم فقط برای تعویض workspace میشه یه شورتکات از پیش تعیین شده ای رو اعمال کرد. اما عملا بی فایده است. خیلی گشتم تا این اسکریپت رو پیدا کردم که در توضیحاتش نوشته بود:

 Simple script to replace xdotool when using Gnome/Wayland for entering keystrokes using evdev. This requires root.  

 #!/usr/bin/python3
import evdev
import sys

upper = { '!': '1', '@': '2', '#': '3', '$': '4', '%': '5', '^': '6', '&': '7', '*': '8', '(': '9', ')': '0' }

with evdev.UInput() as ui:
    escape = False
    for letter in sys.argv[1]:
        if letter == ' ':
            key = evdev.ecodes.KEY_SPACE
        elif letter in upper:
            key = evdev.ecodes.ecodes['KEY_'+upper[letter]]
        elif letter == '\\':
            escape = True
            continue
        elif escape and letter == 'r':
            escape = False
            key = evdev.ecodes.KEY_ENTER
        else:
            key = evdev.ecodes.ecodes['KEY_'+letter.upper()]
        if letter.isupper() or letter in upper:
            ui.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTSHIFT, 1)

        print(key)
        ui.write(evdev.ecodes.EV_KEY, key, 1)
        ui.write(evdev.ecodes.EV_KEY, key, 0)

        if letter.isupper() or letter in upper:
            ui.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTSHIFT, 0)
ui.syn() 

لینک اسکریپت

python-evdev هم از AUR نصب کردم. اما نمیدونم طرز کارش چیه. احتمالا با توجه به توضیحات یک خطی اش میتونه کمک کننده باشه، ولی اینکه چطور کار میکنه من چون بلد نیستم سر در نمیارم. از اساتید گرامی خواهش میکنم راهنمایی بفرمایند.
ممنون.


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#2 2017-06-08 09:44:52

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,292

پاسخ: libinput-gestures و wayland

درود. ظاهرا فقط باید با دسترسی ریشه اجرا بشه.

آفلاین

#3 2017-06-08 10:06:08

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: libinput-gestures و wayland

اجرا بشه یعنی چی؟! ذخیره اش کردم در یک فایل py چکارش باید بکنم؟! هیچ راهنمایی هم نداره.


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#4 2017-06-08 16:00:23

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,292

پاسخ: libinput-gestures و wayland

دقیقا منظور من همون چیزی هست که خودتون گفتید. ابتدا (تحت عنوان یک فایل پایتون) ذخیره ش کنید و سپس بعد از اجرايی کردنش با دستور python اجراش کنید.

آفلاین

#5 2017-06-08 18:20:52

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: libinput-gestures و wayland

نتیجه اجرا کردن این فایل:

 Traceback (most recent call last):
  File "/home/amin/Programs/injectinput.py", line 9, in <module>
    for letter in sys.argv[1]:
IndexError: list index out of range
 

و نتیجه این کار:

 sudo python /home/amin/Programs/injectinput.py space
31
25
30
46
18
spacTraceback (most recent call last):
  File "/home/amin/Programs/injectinput.py", line 31, in <module>
    ui.syn()
  File "/usr/lib/python3.6/site-packages/evdev/uinput.py", line 184, in syn
    _uinput.write(self.fd, ecodes.EV_SYN, ecodes.SYN_REPORT, 0)
OSError: [Errno 9] Bad file descriptor
 

لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#6 2017-06-08 22:20:19

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,292

پاسخ: libinput-gestures و wayland

بنده هم اجرا کردم و خطای مشابهی دریافت شد. اما وقتی به آخرین دستور، یعنی ()ui.syn بنگریم، مشخصه که از نظر intention باید هم سطح دستور for باشه. بنابراین، در فایلی که ذخیره کرده اید، این دستور رُ در جای خودش با چهارتا space متوالی جلو ببرید تا دقیقا همراستایfor بشه. سپس اسکریپت بدون خطا اجرا خواهد شد.

آخرین ویرایش توسط Arcush (2017-06-08 22:28:03)

آفلاین

#7 2017-06-09 00:58:12

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: libinput-gestures و wayland

ممنون، خطا نداد دیگه. ولی برای طرز کارش مجبورم در گیتهاب نویسنده کامنت بذارم.


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB