안녕하세요
잠깐 한가해서 월급루팡중에 질문 하나 올립니다
3d프린터 제어 프로그램인 옥토프린트가 작동중인 랩톱에 사용자 키보드 입력을 받아서 간단한 명령을 수행하는 스크립트를 백그라운드로 돌아가게 할 생각입니다
랩톱은 옥토프린트 전용이라 프린팅 중에는 화면에 로긴하라는 커서만 깜박거리고 아무것도 보이지 않습니다 (랩톱은 프린트 종료후 자동으로 꺼집니다)
대충 별 중요하지 않은 키, 예컨데 F1/F2를 기다리는 스크립트를 생각중입니다...
if [F1 pressed]
then
mosquitto_pub -m "lighton" -t rfplug/3dprinter
fi
if [F2 pressed]
then
mosquitto_pub -m "lightoff" -t rfplug/3dprinter
fi
대충 이런식으로요.
(보시다시피 프린터에 달아놓은 전등의 전원플러그를 MQTT로 컨트롤하는 스크립트입니다
전등은 이미 MQTT로 잘 작동중이구요. 수동컨트롤을 간단히 추가해보려 하는 중입니다)
스크립트는 어떻게 짜 보겠는데... 이걸 백그라운드로 컴이 켜져 있는동안 계속 돌아가게끔 하려면 어떻게 해야 하나요? Daemon... 같은걸 써야 하나요?
대충 방향만이라도 알려주시면 감사드리겠습니다
리눅스를 사용하면서 혹시 이런 일을 해 보셨는지 모르겠네요. Alt+Fn키 를 누르면 tty가 바뀝니다. 엑스윈도우 상에서는 Ctrl 키를 덧붙여줘야 하지만요. 예를 들어, 내가 엑스윈도우를 쓰고 있는데 Ctrl+Alt+F3 키를 누르면 ttyS3의 텍스트 환경에서 login: 프럼프트가 뜹니다. 여기서 로긴해서 사용하다가 Alt+F4 키를 누르면 ttyS4의 login: 프럼프트가 뜨고요. 물론 이건, 물리적 키보드와 물리적 모니터가 달려있는 물리적 컴퓨터를 직접 쓸 때 이야기입니다.
사용자의 키를 입력받으려면 그 프로그램은 어떤 터미널 하나를 가지고 있어야 합니다. 물리적인 키보드로 리눅스에 로그인하는 과정을 살펴보면, getty 라는 프로그램이 리눅스의 가상 터머널을 하나 잡고 있다가 사용자가 그 가상터머널로 접근하면 login 이란 프로그램으로 넘깁니다. login 은 사용자의 입력을 받아 쉘을 기동시키고요. 물리적인 컴퓨터의 시리얼포트에 케이블을 꼽아서 다른 컴퓨터와 연결할 때도 getty 가 터미널을 잡고 있도록 해야 합니다. 예전엔 이런 일을 initab 파일에 설정했는데, 요즘의 systemd 환경에서는 뭔가 다르다고 하네요. https://blog.naver.com/5boon/220475501674
저라면 우선 사용자의 키를 입력받는 스크립트 또는 프로그램을 하나 만들고, 안쓰는 뒷쪽 번호의 가상터미널 하나를 그 프로그램에 전속dedicate 시킬 것 같네요. 그 중간 단계로, 어떤 사용자의 쉘로 이 프로그램을 지정하고 login 이 이 프로그램을 기동시키도록 할 것 같고요.
일단 스크립트부터 짜야겠습니다.
3d프린터가 켜지면 랩톱이 따라서 부팅되고 백그라운드(!)로 옥토프린트가 실행되는 동안 화면에는 로긴프롬프트만 깜박거리거든요.
여기에 자동으로 로긴해서 저 스크립트가 돌아가게끔 설정하면 될거 같군요!