فعال/غیرفعال کردن touch screen در Manjaro

امین 16 سپتامبر 2023 زمان خواندن: 3 دقیقه

اگر از لپتاپ هایی استفاده میکنید که مانیتور اونها تاچ هست و گاهی فعال بودن این تاچ باعث دردسر میشه، میتونید به راحتی هر چه تمام فعال یا غیر فعالش کنین! احتمالا غیر فعال بودنش باعث مصرف کمتر باتری هم خواهد شد.

در مانجارو xinput برای مدیریت ورودی های کامپیوتر نصب شده. مثل وبکم، کیبور، ماوس، تاچ پد و ... با اجرای xinput لیستی از این موارد رو میبینید:

[amin@ASUS ~]$ xinput
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Elan Touchpad                               id=12    [slave  pointer  (2)]
⎜   ↳ USBest Technology SiS HID Touch Controller    id=10    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
  ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
  ↳ Power Button                                id=6    [slave  keyboard (3)]
  ↳ Video Bus                                   id=7    [slave  keyboard (3)]
  ↳ Video Bus                                   id=8    [slave  keyboard (3)]
  ↳ Sleep Button                                id=9    [slave  keyboard (3)]
  ↳ USB2.0 HD UVC WebCam                        id=11    [slave  keyboard (3)]
  ↳ Asus WMI hotkeys                            id=13    [slave  keyboard (3)]
  ↳ AT Translated Set 2 keyboard

همون طور که میبینید تاچ اسکرین لپتاپ با ID شماره 10 مشخص شده که یک چیز ثابتی هست.

حالا با این دستور ها میتونید به راحتی هر کدوم از این ها رو فعال یا غیر فعال کنید:

xinput disable 10
xinput enable 10

اما میشه این عمل رو به یک شورتکات کیبورد نسبت داد. و بصورت toggle درآورد. یعنی با فشردن شورتکات (یا اجرای دستور) چک کنه ببینه اگر تاچ فعاله، غیر فعالش کنه. و اگر غیر فعاله، فعالش کنه.

برای اینکار این رو اجرا کنید تا خرجی شبیه این بگیرید:

[amin@ASUS ~]$ xinput --list-props 10
Device 'USBest Technology SiS HID Touch Controller':
  Device Enabled (138):    0
  Coordinate Transformation Matrix (140):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
  libinput Calibration Matrix (278):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
  libinput Calibration Matrix Default (279):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
  libinput Send Events Modes Available (260):    1, 0
  libinput Send Events Mode Enabled (261):    0, 0
  libinput Send Events Mode Enabled Default (262):    0, 0
  Device Node (263):    "/dev/input/event12"
  Device Product ID (264):    1111, 4300
  libinput Horizonal Scroll Enabled (265):    0

عبارت  Device Enabled (138):    0 مشخص میکنه که اون دیوایس فعاله یا غیر فعال. 0 یعنی غیر فعال. ما از همین در یک اسکریپت استفاده میکنیم:

#!/bin/bash
if [[ $(xinput --list-props 10) == @(*Device Enabled \(138\):    0*) ]]; then
xinput enable 10
else
xinput disable 10
fi

با ذخیره این اسکریپت در یک فایل میتونیم با یک دستور دیوایس مورد نظرمون که اینجا تاچ اسکرین بود فعال و غیر فعال کنیم. و مثلا اون رو با شورت کات Super+F8 اجرا کنیم.

برای اینکه این اتفاق در حین بوت انجام بشه، باید سراغ systemd بریم. اما چون برای xinput باید Display رو مشخص کنیم باید timer در systemd تعریف کنیم. چون حین بوت هنوز display مشخص نشده. خلاصه... محض یاد آوری خودم..

sudo nano /etc/systemd/system/disable-touch.service

با این محنوی:

[Unit]
Description=Disable Monitor Touch Screen by xinput
[Service]
Type=oneshot
User=amin
Environment=DISPLAY=:0
ExecStart=/usr/bin/xinput disable 10

بجای amin نام کاربری خودتون. و بعد:

sudo nano /etc/systemd/system/disable-touch.timer

با این محتوی:

[Unit]
Description=Runs disable-touch 1min after boot
[Timer]
# Time to wait after booting before activation
OnBootSec=1min
Unit=disable-touch.service
[Install]
WantedBy=multi-user.target

و در انتها:

sudo systemctl enable disable-touch.timer

اولین نفری باشید که دیدگاهی ارسال می کند!




حاصل سر و کله زدن های من با لینوکس