Askıya alındıktan sonra bir komutu çalıştırmak nasıl?


44

Dizüstü bilgisayarımda çalışmayı askıya alma / devam ettirmek için yürütülen bir komut dosyası var. Sonra başka bir dizi var xinput, xkbsetve xmodmapben bir oturum başlatmak zaman yürütülür komutlar iki parmakla kaydırma ve klavye kısayolları kurmak için. Askıya aldığımda, iki parmakla kaydırma ve klavye kısayollarım çalışmaz. İkinci dosyadaki komutları tekrar çalıştırmam gerekiyor. Bunları otomatik olarak yapmak için bunları askıya alma / sürdürme komut dosyasına nasıl ekleyebilirim? Aşağıya bakınız:

komut dosyasını askıya alma / sürdürme

/etc/pm/sleep.d/20_custom-ehci_hcd

#!/bin/sh
#inspired by http://art.ubuntuforums.org/showpost.php?p=9744970&postcount=19
#...and http://thecodecentral.com/2011/01/18/fix-ubuntu-10-10-suspendhibernate-not-working-bug    
# tidied by tqzzaa :)

VERSION=1.1
DEV_LIST=/tmp/usb-dev-list
DRIVERS_DIR=/sys/bus/pci/drivers
DRIVERS="ehci xhci" # ehci_hcd, xhci_hcd
HEX="[[:xdigit:]]"
MAX_BIND_ATTEMPTS=2
BIND_WAIT=0.1

unbindDev() {
  echo -n > $DEV_LIST 2>/dev/null
  for driver in $DRIVERS; do
    DDIR=$DRIVERS_DIR/${driver}_hcd
    for dev in `ls $DDIR 2>/dev/null | egrep "^$HEX+:$HEX+:$HEX"`; do
      echo -n "$dev" > $DDIR/unbind
      echo "$driver $dev" >> $DEV_LIST
    done
  done
}

bindDev() {
  if [ -s $DEV_LIST ]; then
    while read driver dev; do
      DDIR=$DRIVERS_DIR/${driver}_hcd
      while [ $((MAX_BIND_ATTEMPTS)) -gt 0 ]; do
          echo -n "$dev" > $DDIR/bind
          if [ ! -L "$DDIR/$dev" ]; then
            sleep $BIND_WAIT
          else
            break
          fi
          MAX_BIND_ATTEMPTS=$((MAX_BIND_ATTEMPTS-1))
      done  
    done < $DEV_LIST
  fi
  rm $DEV_LIST 2>/dev/null
}

case "$1" in
  hibernate|suspend) unbindDev;;
  resume|thaw)       bindDev;;
esac

touchpad iki parmakla kaydırma ve klavye kısayolları komut dosyası

xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Two-Finger Scrolling" 8 1
xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 8 1 1
xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Pressure" 32 10
xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Width" 32 8
setxkbmap -layout gb
xkbset m
xkbset exp =m
xmodmap -e "keycode 135 = Pointer_Button2"

Yanıtlar:


41

Komut dosyalarınızı /etc/pm/sleep.daskıya alındıktan sonra çalıştırılmasını sağlamak için dizine yerleştirebilirsiniz. Komut dosyanızı askıya alma işlemi sırasında da değil, yalnızca devam ettirme sırasında çalıştırmanız için bir koşul eklemeniz gerekir. Örneğin, dokunmatik yüzey komut dosyanız şöyle görünür:

case "${1}" in
    resume|thaw)
        DISPLAY=:0.0 ; export DISPLAY
        xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Two-Finger Scrolling" 8 1
        xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 8 1 1
        xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Pressure" 32 10
        xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Width" 32 8
        setxkbmap -layout gb
        xkbset m
        xkbset exp =m
        su $USER -c "sleep 3; /usr/bin/xmodmap -e "keycode 135 = Pointer_Button2"" &
;;
esac

Komut dosyanızın genel olarak çalıştırılabilir olduğundan emin olun ve $ USER öğesini ilgili kullanıcı adıyla değiştirin.

Daha fazla bilgiyi pm-suspend manpage ( man pm-suspend) 'de veya /usr/share/doc/pm-utils(özellikle /usr/share/doc/pm-utils/HOWTO.hooks.gz) içindeki belgelere bakarak bulabilirsiniz .


2
Neye istersen denebilir. Öğleden sonra askıya alma sayfası başına 00-49 arasında bir sayı ile başlamak iyi bir fikirdir: "00 - 49 Kullanıcı ve paket verilen kancaların çoğu. Bir kanca, normal hizmetlerin ve kullanıcı alanı altyapısının hala çalıştığını varsayarsa, burada olmalı. "
Fader

3
Başka bir (şimdi silindi) yanıtı şöyle oldu: 'lütfen aşağıdaki hata raporuna dikkat edin: canlı komut dosyalarına yükselttikten sonra launchpad.net/ubuntu/+source/pm-utils/+bug/1455097/lib/systemd/system-sleep/ "
Wilf

8
On Ubuntu 15.10 , senaryo içinde olmak zorundadır /lib/systemd/system-sleep/yerine /etc/pm/sleep.
Marc Belmont

7
On Ubuntu 16.04 komut verilen bağımsız değişkendir preaskıya girmeden önce ve postyerine çağrıldıktan sonra suspendveresume
Germar

3
Buradaki son iki yorumu yakkety (16.10) denedim ve çalışmadı. Nasıl sorun giderilir?
Gringo Suave

7

Ubuntu 16.04'te şu şekilde hizmet oluşturmak zorunda kaldım:

  1. dosya oluştur

    sudo gedit /etc/systemd/system/somename.service
  2. içine koymak

    [Unit]
    Description=Some description
    Before=sleep.target
    StopWhenUnneeded=yes
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStop=-/path/to/your/script.sh
    
    [Install]
    WantedBy=sleep.target
  3. hizmeti etkinleştir

    sudo systemctl enable somename
  4. (isteğe bağlı) askıya alma işlemine devam ettikten sonra çalışmıyorsa> hata olup olmadığını kontrol edin

    journalctl -u somename.service

Bu aynı zamanda Ubuntu 18.04'te de çalışıyor gibi görünüyor, teşekkürler!
kelunik

Ubuntu, /etc/pm/sleep.d'yi kullanmıyorsa neden etrafta bırakıyor? Kafa karıştırıcı ve yanıltıcıdır.
Jonathan Neufeld

Bu benim için ubuntu 18.04'te (aslında KDE Neon) çalıştı, ama a) zorundaydım: [Servis] altında, User = tim'i betiğim benim kullanıcım olarak çalışacak şekilde koyardı), DISPLAY =: 0.0; ihracat DISPLAY
Tim Richardson

3

Bu dosyayı aç:

sudo vim / lib / sistemd / sistem uykusu / hdparm

İçindekiler:

#! / Bin / sh

1 dolarlık dava 
  İleti)
    /usr/lib/pm-utils/power.d/95hdparm-apm özgeçmiş
    ## Komut dosyanızı çalıştırmak için komutunuzu yapıştırın
    ;; esac

Komutunuz yönetici ayrıcalıklarıyla yürütülecek .

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.