Unity 로그인 / 로그 아웃에서 스크립트를 어떻게 실행합니까?


8

SSHFS를 통해 일부 폴더를 마운트하는 스크립트와 마운트 해제하는 스크립트가 있습니다.

기본 Ubuntu 데스크탑이 시작될 때 (그래픽 콘솔에 로그인 한 후) 마운트 스크립트를 시작하고 싶습니다-오른쪽 상단의 톱니 바퀴에서 "로그 아웃 ..."할 때 마운트 해제 스크립트 데스크탑.

누군가 이것을 달성하는 방법을 말해 줄 수 있습니까? 데스크탑 실행 / 종료시 명령을 실행하는 가장 편리한 표준 후크는 무엇입니까?


타이밍이 중요하지 않다고 생각합니다. 중요한 것은 사용자가 대화식으로 응용 프로그램을 시작하기 전에 첫 번째 스크립트가 1 초 정도 실행된다는 것입니다. 로그 아웃 할 때 다른 사람이 콘솔에 로그인하기 전에 두 번째 스크립트가 실행되는 것이 중요합니다.
aSteve

루트 액세스 권한이 있습니다. 패키지 설치는 문제가되지 않습니다. 가능한 경우 깔끔한 방법이 있다고 가정하고 사용자 수준의 권한 만 사용하고 싶습니다. 내 스크립트에는 루트가 필요하지 않습니다. Unity 시작 / 중지에서 스크립트를 시작하는 가장 좋은 방법에 대한 조언을 찾고 있습니다 ... 대부분의 Linux / Unix 경험은 비 GUI 컨텍스트에 있습니다. 구식 XWindows와 바닐라 창 관리자를 사용하여 .xinitrc에서이 작업을 수행 할 수있었습니다. 최신 기본 Unity 데스크톱을 사용하는 가장 좋은 방법은 무엇입니까?
aSteve

마운트 / 마운트되지 않은 항목에 따라 로그 오프 동작을 만들고 싶지 않습니다. 기존 스크립트에서 모두 동적으로 처리됩니다. 콘솔에서 GUI 세션에 대해 첫 번째 로그온 및 두 번째 로그온시 스크립트를 실행하는 깔끔한 방법이 필요합니다. "스타트 업 응용 프로그램"을 찾았지만 문제의 전반부 만 해결할 수 있습니다.
aSteve

"로그인 응용 프로그램"이 두 스크립트 모두에 적합한 전략이라고 생각하지 않습니다. 두 개의 스크립트가 있습니다. 하나는 GUI 세션을 설정합니다. 다른 하나는 GUI 세션 후에 정리됩니다. 둘 다 GUI 세션과 동일한 사용자로 실행해야합니다. 인수도 필요하지 않습니다. 적절한시기에 스크립트를 시작하는 적절한 방법을 찾아야합니다. 스크립트가 실제로 무엇을하는지에 대한 가정은 필요하지 않습니다. 이 질문은 Unity 로그온 및 로그 오프와 일치하는 이벤트를 연결하는 방법에 관한 것입니다.
aSteve

답변:


9

다른 로그인이 아닌 Unity에 로그인 할 때 작업을 실행해야한다는 점을 고려하면 Upstart 세션 작업 이 완벽 해 보입니다.

GUI 로그인 후 실행하는 init프로세스 는 두 번째 프로세스에 있습니다. 이는 init올바른 Upstart init이며 해당 이벤트에서 생성 된 이벤트를 기반으로 세션 작업을 시작 및 중지 할 수 있습니다. 루트 권한이 전혀 필요하지 않습니다. 더 나은 아직 (또는 관점에 따라 더 나쁘다), 이것은 헤드리스 시스템에서 아직 완전히 지원되지는 않습니다. SSH 로그인이 지금 막 만든 빠른 테스트에서 사용자 init를 시작하지 않았습니다.

세션 작업을 만들려면에서 새 .conf파일을 만드십시오 ~/.config/upstart. 이것이 Upstart 세션 작업 ( $XDG_CONFIG_HOME/upstart) 의 기본 기본 디렉토리입니다 ( 없는 경우). 다음은 작업 예입니다.

tee ~/.config/upstart/myjob.conf <<EOF
description "My job"
start on desktop-start
stop on desktop-end

script 
       firefox 'http://upstart.ubuntu.com/cookbook/#session-job'
end script
EOF

수동으로 제어 할 수 있습니다.

start myjob 
# or
initctl start myjob

service명령은 시스템 작업 ( /etc/init.d또는 in /etc/init) 을 제어하는 ​​데 사용됩니다 . 세션 작업을 제어하려면 initctlUpstart와 상호 작용하는 데 사용되는 명령 을 사용해야합니다 .

man upstart-events사용할 수있는 더 많은 이벤트를 참조하십시오 .


나는 눈치 채지 못했지만 ... 나는 동의합니다. 신생 세션은 완벽 해 보입니다. 아마도 분명한 것이 빠져있을 것입니다 ...하지만 "service myjob start"를 실행할 때 ~ / .config / upstart / myjob.conf (위와 같이)를 만들면 "myjob : unrecognized service"가 나타납니다.
aSteve

해결 : "service myjob start"대신 "start myjob"을 사용해야했습니다. 또 다른 유용한 명령은 "initctl list"
aSteve

@aSteve 죄송합니다. 나는 그것을 수정했다
muru

문제 없어요. 업 스타트 / 세션 접근법은 분명히 옳습니다. 즉, 별도의 (짧은 수명) 시작 및 중지 스크립트를 실행하는 데 가장 적합한 방법을 아직 확인하지 못했습니다. .conf 파일을 1 개만 사용할 수 있습니까, 아니면 2 개가 필요합니까? "서비스"또는 "작업"이어야합니까? 사전 / 사후 시작 및 사전 / 사후 중지를 사용해야합니까? 시작과 중지 사이에 프로세스를 실행할 필요가 없습니다. 도구 모음에 아이콘을 넣는 쉬운 방법이 없다면 내 생각에는 너무 과잉 일 것입니다.
aSteve

1
드디어. 많은 해킹 후 ... 나는 "end-end"가 아니라 "session-end"에서 myendtask를 실행해야한다는 것을 발견했다. 이것은 다소 직관적이지 않지만 작동합니다. (마지막!)
aSteve

1

해결책은 시작 작업을 사용하는 것이 었습니다. 두 가지 작업이 필요했습니다. 하나는 사용자가 데스크톱을 초기화 할 때 발생합니다. 두 번째는 사용자 세션이 만료 될 때입니다. 다음 두 스크립트는 Ubuntu 14.04에서 작동합니다.

~ / .config / upstart / desktopOpen.conf에서

description "Desktop Open Task"
start on desktop-start
task
script
# Commands to mount sshfs go here as shell-script.
end script

~ / .config / upstart / desktopClose.conf에서

description "Desktop Close Task"
start on session-end
task
script
# Commands to unmount sshfs go here as shell-script.
end script

이러한 이벤트가 향후 Ubuntu 릴리스의 요구 사항을 계속 충족 할 것이라고 생각합니다. 다른 사람들이 사용할 수 있도록 여기에 솔루션을 게시 할 가치가 있다고 생각했습니다.


-1

로그인 후 스크립트를 실행하기위한 제안 사항은 다음과 같습니다.

부팅 후 StackOverflow Linux 스크립트 : Cliff 노트는 * .sh 파일을 /etc/profile.d에 넣습니다.

부팅 할 때 스크립트를 실행하려면 다음을 수행하십시오.

부팅 후 StackOverflow Linux 스크립트 : Cliff 노트는 /etc/rc.local 또는 crontab을 사용하는 것입니다.


1
이러한 옵션 중 어느 것도 '올바로'보이지 않습니다. 단일 세션을 시작 / 종료한다는 의미에서 로그온 / 로그 오프 할 때만 스크립트를 실행하고 싶습니다. 새로운 로그온이있을 때마다 스크립트를 실행하고 싶지 않습니다. 새로운 로그온은 ssh 등을 통해 원격으로 시작될 수 있지만 콘솔에서 새로운 Unity 세션을 시작하지 않기 때문에 스크립트를 실행하기를 원하지 않습니다.
aSteve
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.