Bir farenin bağlı olup olmamasına bağlı olarak dokunmatik yüzeyi nasıl değiştirebilirim?


10

Harici bir fare bağlandığında dokunmatik alanımın otomatik olarak devre dışı bırakılmasını ve yokken etkinleştirilmesini istiyorum. Kullanmayı denedim touchpad-indicatorama bilgisayar bağlı bir fare ile uykuya konuldu ve fare bağlantısı kesilmiş uyandığı durumlarda başarısız olur.

Bu sorunu çözmek için bir daemon içine aşağıdaki komut dosyası yapmaya çalıştım ama işe alamıyorum:

#!/bin/bash

declare -i TID
declare -i MID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
MID=`xinput list | grep -Eo 'Mouse\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
if [ $MID -gt 0 ]
then
    xinput disable $TID
else
    xinput enable $TID
fi

denedim start-stop-daemon -S -x ./myscript.sh -b

ve setsid ./myscript.sh >/dev/null 2>&1 < /dev/null &

ve nohup ./myscript 0<&- &>/dev/null & hatta./myscript.sh &

Bunların hepsi, sanırım, başlatılan sürecin PID'si olması gereken 4 basamaklı bir sayı döndürüyor , ancak lxtask'ı başlattığımda , "tüm işlemleri görüntüle" seçeneğini işaretlesem bile, bu PID ile hiçbir işlem yok . Ve elbette, işe yaramıyor!


@terdon Bağlı usb fareyi izleyerek bir daemon yapmaya çalışıyorum ve xinput'tan touchpad'i etkinleştirmesini veya devre dışı bırakmasını istiyorum. Sorun için diğer tek çözüm olan touchpad göstergesi olarak adlandırılan bir programın biraz kusuru var. Dizüstü bilgisayarımı fare bağlıyken uyurken ve olmadan uyandığımda, touchpadimin etkinleştirilmesi için onu bağlamak / bağlantısını kesmek için en yakın fareyi aramam gerekiyor. Kısacası, uyanıkken tekrar kontrol edilmesini istiyorum.
Mart'ta mekkanizer

Ubuntu'ya Sor hoş geldiniz! Ek bilgi eklemek için lütfen sorunuzu düzenleyin , okunması zor ve yorumlarda kaçırılması kolay.
terdon

Her şeyden önce, "bunu cömertleştirmeye çalıştığınızı" ve bunu tam olarak nasıl yaptığınızı açıklamalısınız. Daha sonra, xinputçalışan bir X sunucusuna ihtiyaç duyuyor ve şeytanlar olarak şeyleri çalıştırmanın çoğu yöntemi X'e bağlanma konusunda hiçbir bilgiye sahip değil veya üçüncü olarak. Birinin başvurmaya çalıştığı aslında bunu yapmanın yolu değildir ve genellikle XY sorunu olarak bilinen yanlış soruyu sorarsınız .
terdon

@terdon Çözüm aramaya geri dönersek, xinput'un (olası?) analogu nedir: 1. Arka planda çalışabilir 2. Cihazları etkinleştirebilir / devre dışı bırakabilir mi?
Mart'ta mekkanizer

1
yorum kaldırıldı . Ask Ubuntu'da iyi olmak isteğe bağlı değildir. Lütfen kibar ol. Kaba yorumlar uyarı yapılmaksızın kaldırılacaktır.
Seth

Yanıtlar:


10

İhtiyacınız olan temel komut dosyası:

#!/usr/bin/env bash

## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

## Run every second
while :
do
   ## Disable the touchpad if there is a mouse connected
   ## and enable it if there is none.
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    ## wait one second to avoind spamming your CPU
    sleep 1
done

Yukarıdaki komut dosyası, farenin bağlı olup olmamasına bağlı olarak izleme dörtgenini değiştirir. Başlatıldığında, sonsuza kadar çalışır ve her saniye bir fare olup olmadığını kontrol eder, dokunmatik yüzeyi uygun şekilde devre dışı bırakır veya etkinleştirir.

Şimdi, komut dosyasını şu şekilde kaydedin, ~/touchpad.shyürütülebilir ( chmod +x ~/touchpad.sh) yapın ve GUI oturumu başlatma programlarınıza ekleyin. Hangi masaüstü ortamını kullandığınızı belirtmediniz lxtask, ancak bahsettiğinizden beri kullandığınızı varsayacağım LXDE. Her durumda, burada her ikisi için talimatlar verilmiştir LXDEve Unity:

  1. Komut dosyasını LXDE'nin otomatik başlatma dosyalarına ekleyin

    echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file

    "PROFİL" i LXDE profilinizin gerçek adıyla değiştirdiğinizden emin olun , çalıştırarak ne olduğunu öğrenebilirsiniz ls ~/.config/lxsession/.

  2. Komut dosyasını Unity'nin otomatik başlatma dosyalarına ekleyin

    Startup Applications(kontrol panelinde "Başlangıç" ifadesini arayın)

    resim açıklamasını buraya girin

    "Ekle" yi tıklayın ve komut dosyanızın yolunu komut alanına yapıştırın:

    resim açıklamasını buraya girin


Bir döngü kullanmadım çünkü arka planda komut dosyası çalıştırma hakkında googledim, herkes döngü kullanmamayı önerdi. Tek çözüm buysa ve bir arka plan programı için bir betikte kullanılabilecek xinput analogu yoksa ve cihazları etkinleştirebilir / devre dışı bırakabilirse ... tamam, kullanacağım.
Mart'ta mekkanizer

1
@mekkanizer bu gerçekten en iyi yol değil . Çok daha temiz bir yol, udev kurallarını kullanmak ve gerekli X kimlik bilgilerini onlara vermek olacaktır. İsterseniz buna bakabilirsiniz.
terdon

Teşekkürler, yapacağım. Eğer işe
alırsam

10

Tamam, bunun için bir udev kuralı belirledim ve @terdon'un dediği gibi, çok daha temiz bir yol

Bu nedenle, bu kılavuz sayesinde , /etc/udev/rules.d/ (kök erişimi gerektirir) içinde bir "touchpad_toggle.rules" dosyası oluşturdum ve iki satırla doldurdum:

SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/on.sh"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/off.sh"

"Kullanıcı adı" nı kullanıcı adınızla değiştirmeyi unutmayın!

Bu açık ve kapalı kabuk komut dosyalarının içeriği, sorumun komut dosyasının kısırlaştırılmış sürümüdür. Örnek - off.sh:

#!/bin/bash

declare -i TID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
xinput disable $TID

On.sh dosyasında xinput enable $ TID kullanmanız gerekecek

Ve cevabımda söylediğim gibi oturumun otomatik başlatılmasına sorumu (veya @terdon'ın önerdiği, ancak bir döngü olmadan) komut dosyasını eklemeyi unutmayın.

Bu kadar, ama bir şey eklemek zorundayım:

Bir Synaptics dokunmatik yüzeyiniz varsa (Elantech'im var, bu yüzden benim için uygun değil), komut dosyalarınızı (RUN + = sonra yazdığınız yollar) basit bir komutla /usr/bin/synclient TouchpadOff=0ve 1 ile değiştirebilirsiniz.


sadece bir nitpick, udevkuralı herhangi bir şekilde oluşturmak için root erişimine ihtiyacınız olduğundan , dosyayı ana dizinden başka bir yere kaydetmek daha iyi olabilir. Örneğin: /usr/local/binveya /opt/touchpad-toggle/bin/.
Dan

@Dan reddetti. Kullanıcı ayarlarıyla ilgili her şey ana dizinde olmalıdır. Ne yazık ki, udev kuralları, oturum açma yöneticisi ayarları ve diğer birkaç şey , elbette bir anlık görüntüyü geri yüklemediğiniz sürece, her hurda / bölme yaptığınızda / * öğesine kopyalanmak üzere kaderlenir . Yani / home / içinde saklanan daha fazla şey olması sadece kolaylık. Yani, tavsiyenin bir değeri yok
mekkanizer

Ancak bir udev kuralı olarak eklendiğinden, bu, kimin giriş yaptığı önemli değil, herhangi bir kullanıcı için çalışacağı anlamına gelmez mi?
Dan

Paylaşılan bilgisayarlarda Linux'u hiç kullanmadığım için kontrol etmedim. Her neyse, bu temiz udev kuralı tarafından tahriş olan herhangi bir kullanıcı benim ilgimi çekmez. Çok hassaslarsa, kendi kurulumlarını alabilirler
mekkanizer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.