일시 중단에서 다시 시작한 후 명령을 실행하는 방법은 무엇입니까?


44

랩톱에서 일시 중지 / 다시 시작하기 위해 실행되는 스크립트가 있습니다. 그럼 난 또 다른 시리즈가 xinput, xkbset그리고 xmodmap내가 세션을 시작할 때 실행되는 명령은 두 손가락 스크롤 및 키보드 바로 가기를 설정해야 할 수 있습니다. 일시 중단에서 다시 시작하면 두 손가락 스크롤 및 키보드 단축키가 작동하지 않습니다. 두 번째 파일의 명령을 수동으로 다시 실행해야합니다. 이것을 suspend / resume 스크립트에 추가하여 자동으로 수행하려면 어떻게해야합니까? 아래를보십시오 :

스크립트 일시 중지 / 다시 시작

/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

터치 패드 두 손가락 스크롤 및 키보드 단축키 스크립트

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"

이것은 askubuntu.com/questions/226278/run-script-on-wakeup/483714 의 사본 인 것 같습니다 . askubuntu.com/a/483714/170127의 내 의견도 참조하십시오 .
jamadagni

답변:


41

스크립트를 /etc/pm/sleep.d디렉토리에 배치하여 일시 중단 후에 스크립트를 실행할 수 있습니다. 스크립트가 다시 시작 중에 만 일시 중지 프로세스가 아니라 실행되도록하려면 조건을 추가해야합니다. 예를 들어, 터치 패드 스크립트는 다음과 같습니다.

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

스크립트가 전체적으로 실행 가능한 것으로 표시되어 있고 $ USER를 해당 사용자 이름으로 변경하십시오.

자세한 내용은 pm-suspend 맨 페이지 ( man pm-suspend)에서 또는 /usr/share/doc/pm-utils(특히 /usr/share/doc/pm-utils/HOWTO.hooks.gz) 의 설명서를 참조하십시오.


2
원하는대로 호출 할 수 있습니다. pm-suspend 맨 페이지에 따라 00-49 사이의 숫자로 시작하는 것이 좋습니다. "00-49 사용자 및 대부분의 패키지 제공 후크. 후크가 모든 일반 서비스 및 사용자 공간 인프라가 여전히 실행되고 있다고 가정하면, 여기 있어야합니다. "
fader

3
또 다른 (현재 삭제 된) 대답 은 다음과 같습니다. '다음 버그 보고서를 참고하십시오 : 생생한 스크립트로 업그레이드 한 후 launchpad.net/ubuntu/+source/pm-utils/+bug/1455097/lib/systemd/system-sleep/'
Wilf

8
우분투 15.10 , 스크립트에 있어야하는 /lib/systemd/system-sleep/대신 /etc/pm/sleep.
Marc Belmont

7
우분투 16.04 스크립트에 주어진 인수입니다 pre중단에 들어가기 전에하고 post대신 다시 시작한 후 suspendresume
Germar

3
yakkety (16.10)에 대한 마지막 두 가지 의견을 시도했지만 작동하지 않았습니다. 문제를 해결하는 방법?
Gringo Suave

7

우분투 16.04에서 나는 이런 식으로 서비스를 만들어야했습니다.

  1. 파일 만들기

    sudo gedit /etc/systemd/system/somename.service
  2. 안에 넣다

    [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. 서비스를 가능하게하다

    sudo systemctl enable somename
  4. (선택 사항) 일시 중지에서 재개 한 후 작동하지 않는 경우>

    journalctl -u somename.service

이것은 Ubuntu 18.04에서도 작동하는 것 같습니다. 감사합니다!
kelunik

Ubuntu가 왜 사용하지 않으면 /etc/pm/sleep.d를 그대로 둡니다. 혼란스럽고 오도합니다.
Jonathan Neufeld

이것은 우분투 18.04 (실제로 KDE Neon)에서 나에게 도움이되었지만 a) 다음과 같이해야했습니다. 수출 디스플레이
Tim Richardson

3

이 파일을여십시오 :

sudo vim / lib / systemd / system-sleep / hdparm

내용:

#! / bin / sh

사례 $ 1 
  우편)
    /usr/lib/pm-utils/power.d/95hdparm-apm resume
    ## 스크립트를 실행하기 위해 명령을 붙여 넣기
    ;; esac

명령은 관리자 권한으로 실행됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.