UDEV, bir oturumda oturum açan bir kullanıcının çekiciliğini bir şekilde tetikleyebilir mi?


0

Ben istiyorum zenityben yedek çalıştırmak isterseniz diye belirli harici sürücü takılı olduğunda, bana sormak iletişim pop-up.

Ne yazık ki, UDEV kural sözdizimi ile ilgili sorun yaşıyorum. Bu kuralı şurada aldım /etc/udev/rules.d/test.rules:

ACTION=="add", ATTRS{manufacturer}=="Western Digital", ATTRS{idVendor}=="1058", ATTRS{idProduct}=="1140", RUN+="/usr/local/bin/test.sh"

Oldukça basit, ama:

  1. Bir kere yerine bir düzine kez tetiklenir.
  2. Bu kullanarak 'konuşmak' olamaz zenityzaman test.shgider sudo -Hu <username> zenity --warning --text="Just some random text for now."Udev uzak sistemde sıkışmış çünkü ve pencere yöneticisini bulamıyor: Gtk UYARI **: açamıyor ekran:
  3. Çok düzenleme dostu değil, bazı senaryoları tetiklemek istediğim belirli bölümler için LABEL yazabildiğim bir tür kural olsaydı.

UDEV kuralı için genel bir gelişme görmek isterim, çünkü bununla ilgili birçok soru ve cevabın yanı sıra, burada ve başka yerlerde, hepsi birbirinden biraz farklı görünüyor ve çoğu birden çok kez tetikliyor.

Fakat en önemlisi, nasıl olsa, çalışabilmesi için buradan, evimdeki ve ekranım gibi şeylere erişebilen bir komut dosyası ile buradan nasıl bağlantı zenitykurabilirim?

Yanıtlar:


0

Cevabı zaten buldun. Script (zenity), bir mesajı görüntülemek için bir X Pencere Sunucusuna ihtiyaç duyar. Komut dosyası çalıştırılır udevve buna ekli bir ekran yoktur. Bunu, DISPLAYbetiğinizdeki değişkeni bağlayarak çözebilirsiniz .

DISPLAY=:0; export DISPLAY

Bunun dezavantajı, yalnızca kullanıcı sizseniz ve / veya ekranı önceden tanıyorsanız işe yarar. Sisteminizde birden fazla kullanıcı varsa, gösterge örneğin başka bir şey, olabilir :1, :2vb. Ya da başka bir kullanıcı ekranındaki zenity mesajını alır.

Daha iyi bir yaklaşım, olayın tespitini ve kullanıcı ile etkileşimi veya mesajın gösterimini bölmek olacaktır.

Bunun için GUI oturumunuzda çalışan ve bir daemon veya udev tetikleyici komut dosyasındaki bir tetikleyiciyi dinleyen bir komut dosyası veya program oluşturabilirsiniz.

Üçüncü bir olasılık udisks-daemon, harici cihaz prize takılı olduğunda bağlanmak ve bilgi istemek olabilir. Bir olay olduğunda, bunun için udisks --monitorveya bunun udisks --monitor-detailiçin deneyebilir ve çıktıyı çözümleyebilirsiniz.

udisksctlBiraz farklı bir sözdizimi ile aynı şeyi yapan bir komut var gibi görünüyor . Belki de sadece udiskskomutun daha yeni bir versiyonudur .

Ayrıca udev / udisks sistemine de bağlı olan GNOME Disks gibi bazı Gui araçlarına bakabilirsiniz .

Güncelleme :

Çoklu başvurular genellikle çeşitli alt sistemlerin raporlarından kaynaklanmaktadır. Ortamı /usr/local/bin/test.shkomut dosyasındaki bazı günlük dosyalarına kaydettiğinizde bunu görebilirsiniz.

umask 077
mkdir -p /tmp/udevtest.d
env >>/tmp/udevtest.d/udevtest.log

Bir USB çubuğu taktığımda aşağıdaki raporları alıyorum

$ grep -e ACTION -e SUBSYSTEM /tmp/udevtest.d/udevtest.log
ACTION=add
SUBSYSTEM=usb
ACTION=add
SUBSYSTEM=usb
ACTION=add
SUBSYSTEM=scsi
ACTION=add
SUBSYSTEM=scsi_host
ACTION=add
SUBSYSTEM=scsi
ACTION=add
SUBSYSTEM=scsi
ACTION=add
SUBSYSTEM=scsi_disk
ACTION=add
SUBSYSTEM=scsi_generic
ACTION=add
SUBSYSTEM=scsi_device
ACTION=add
SUBSYSTEM=bsg
ACTION=add
SUBSYSTEM=block
ACTION=add
SUBSYSTEM=block

Ayrıca DEVTYPEikisi usbveya diskraporları ayırt etmek için ekleyebilirsiniz . Bu nedenle, raporları yalnızca birkaç hatta yalnızca bir aramaya indirgemek için, daha belirgin olmanız ve udev kural dosyasına ek koşullar eklemeniz gerekir; örneğin SUBSYSTEM=scsi_disk, cihazınız için uygun olanı veya hangisini seçin .


Cevap ve alternatiflerden bahsettiğiniz için teşekkür ederiz. Haklıydın, DISPLAY=:0numarayı yaptın. Bu yanıt 2 alt sorusuna hitap ediyor, ancak alt sorgu 1'in öngördüğü gibi, şimdi zenitysürücüye bağlı 1 için yaklaşık 30 kez açılır pencerem var. Bunu nasıl azaltacağım hakkında bir fikrin var mı? Tercihen betiğin sadece bölüm adı ile argüman olarak çağrılmasını istiyorum. (Örneğin, senaryo 3 bölümle 3 kez denir.) Ayrıca denedim, udisksçünkü çok kolay görünüyor, ama sadece izlemekte olduğu iddia ediliyor ama taktığım hiçbir şeyi rapor etmiyor. Belki de Ubuntu için doğru bir şekilde uygulanmadı.
Redsandro

Ah udiskctlolayları izler. udevBaşlangıçta planlandığı gibi kurallarda nasıl yapılacağını çözemezsem daha fazla araştıracağım .
Redsandro

@Redsandro Lütfen güncellenmiş cevaba bakınız.
Olaf Dietsche

Teşekkür ederim. Hala bir bilmece, ama şimdi daha iyi bilgilendiriliyim. Cevabınızı kabul ettim.
Redsandro

0

Bunu okuyan herkes için Kali Linux 2016'daki senaryomu çalıştırmamın tek yolu şöyle oldu:

#!/bin/bash
set -x
xhost local:root
export DISPLAY=:0.0
su root -c 'zenity --notification --text="I am a notification!"'
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.