[해결]레트로파이에 듀얼쇼크4 드라이버를 자동 실행 하는 과정에서 질문이 있습니다.



  • 라즈베리파이3 에 레트로파이를 얹은 뒤 듀얼쇼크4와 연결하여 사용하고자 합니다.

    레트로파이 깃허브에 올라온 방식대로 듀얼쇼크4 드라이버(ds4drv) 설치까지 완료하고
    페어링하고 조작하는 부분까지는 완료하였는데요.

    라즈베리파이가 부팅하면서 자동으로 실행하는 부분에서 실패를 합니다.

    /etc/rc.local 에 스크립트를 입력하고 재시작을 해도 자동으로 실행을 하지 않은채 레트로파이 GUI 환경으로 넘어갑니다.

    /etc/rc.local 에는

    # 주석문
    /usr/local/bin/ds4drv --led ff0000 &
    exit 0
    

    라고 스크립트를 적었습니다.

    systemctl 명령으로 확인한 결과
    systemctl status rc-local.service 명령 입력 시 Main PID: 에서만 Failed가 나타나는것을 발견하였습니다.

    그리고 다시 systemctl restart rc-local.service 명령을 입력하면
    뒤늦게 rc.local이 동작하면서 ds4drv가 실행하고 다시 status로 확인을하면
    Main PID: 가 (ds4drv)로 바뀌어 있는 것을 발견하였습니다.

    rc.local이 동작하지 않는 이유가 이거인거같은데 혹시 해결 할 수 있는 방법이 있는지 조언 부탁드립니다.

    0_1467793107872_2016-07-05 11.03.57_resized.jpg


  • Global Moderator

    @ggumt 안녕하세요 나무꾼 입니다.

    개인적으로는 wheezy 에서 jessie 로 남아기면서 오토스타트의 경우에는 crontab 을 추천드리고 있습니다.

    더불어 이야기 하신 부분은 직접 테스트를 보면서 문제점을 찾아봐야 할 듯 합니다.

    산딸기마을 라즈조이박스 배포용 버젼을 이용 중이신가요 ?



  • @Jae-Sang-Lee
    아니요 레트로파이 단체 홈페이지 https://retropie.org.uk/에서 직접 이미지파일을 받았습니다. 버전은 3.8 버전이고요.

    /etc/systemd/system/에다 rc-local.service파일을 생성하고 인터넷을 참고로해서 세션을 적어서 넣었는데도 동일한 결과가 나오네요 systemctl enable rc-local 은 여전히 동작하지 않고 있습니다. Install에 대한 세션도 적어 넣었는데요

    달라졌다면 systemctl restart rc-local 을하고 나면 Active에서 active (running)으로 나오던 것이 active (exited)로 바뀌어 나온다는 거 말고는 없어요.

    ds4drv 말고 간단한 프로그램을 rc.local에 등록해서 동작시켜보아야 하나 생각은 하는데. 초심자라 어떤식으로 프로그램을 만들어봐야할지 감이 안잡히네요.

    이전까지 단계는 이미지로 만들어 놓고 말씀하신 crontab을 사용해서 자동실행을 다시한번 설정해보겠습니다.

    답변 감사합니다 ㅎㅎ

    0_1467850354564_20160706_081323_resized.jpg



  • @ggumt 혹시 아래 명령어를 실행하셨나요?
    systemctl enable rc-local
    enable 옵션이 부팅시 시스템 서비스 자동시작 명령어입니다.



  • @zzeromin 네 그림에도 보이듯이 systemctl enable rc-local 을 사용하였을때
    The unit files have no [Install] section. They are not meant to ve enabled using systemctl.
    문장과 함께 해결법에 대한? 안내가 나옵니다.

    인터넷에서 rc-local.service 파일을 만들고 세션을 적어 넣으라는 말을 들어서
    [Unit], [Service], [Install]에 대한 세션을 적어서 넣었습니다. 그런데도 systemctl enable rc-local 이 사용이 안되네요 ;;;


  • Global Moderator

    @ggumt 안녕하세요 나무꾼 입니다.

    우선 라즈조이박스 PS3(무선 조이스틱) 및 4인용 조이스틱 설정 포스트는 산딸기마을 RetroPie 3.7bt 버젼을 통해 배포 중 입니다.

    또한 사용 중이신 3.8 버젼의 경우, RetroPie team released 내역에 표기 되어 있듯 블루투스 관련 버그가 일부 남아 있는 버젼 입니다.

    RetoPie 3.8.1 공식 배포판의 경우, 블루투스 관련 버그(커널 디바이스 롤 정의 관련 내용)를 포함해 총 193개의 패치가 이루어져 있으니 최신 버젼으로 변경하시고 다시 한번 시도를 해 보시는 것이 좋으실듯 합니다.

    [참고자료]



  • @ggumt 그러면 rc-local.service 내용을 남겨주실래요?



  • @zzeromin 넵 제가 지금 당장 갖고있지 않아서 늦겠지만 퇴근후에 내용을 올리겠습니다 ㅠㅠ 감사합니다.



  • @ggumt 참고로 제가 서비스 만들 때 사용하는 예시를 남깁니다.

    * runelcd.service 만들기
    nano /usr/lib/systemd/system/runelcd.service
    
    [Unit]
    Description=Runeaudio_I2C_LCD service
    After=network.target
    
    [Service]
    Type=simple
    ExecStartPre=/usr/bin/sh -c "sleep 3"
    ExecStart=/usr/bin/python2 /root/RuneAudioLCD/start.py
    TimeoutSec=0
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    


  • @Jae-Sang-Lee 참고자료 확인하고 다시한번 시도해보겠습니다 ;; 정말 답변 감사합니다.


  • Global Moderator

    @ggumt 참 추가로 라즈베리파이 모델 3B 의 경우에 그냥 블루투스를 사용하실 수가 없고, config.txt 수정을 통해 mini uart 를 활성화 해 gpio 포트를 변경 주셔야 합니다.

    관련 내용은 Setting up a PS4 controller 내용을 보신 것이 맞으시다면 설정하신 내용 중 누락된 부분이 없으신지도 추가로 확인 바랍니다.

    [참고]



  • @Jae-Sang-Lee

    mini uart부분은 확인을 안해봤네요. Setting up a PS4 controller에 대한 내용은 똑같이 따라 하였습니다.


  • Global Moderator

    @ggumt 마을 포럼에 GPS 로 검색하시면 라즈베리파이 3 시리얼 관련 내용에 블루투스 미니유아트 관련 내용이 좀 있을꺼에요.

    레트로파이에서는 커널관련 테스트를 해보지 않아 당장은 저도 기존 정보와 레트로파이팀 내용을 근간으로 한 추론적 답변만 가능할 듯 합니다

    마지막으로 레트로팀 위키에 있는 내용은 블투를 쓰지 않겠다는 커널 옵션입니다.



  • @Jae-Sang-Lee

    This wiki is how I was able to get my ps4 controller to work with my Raspberry Pi 3. I am using a Bluetooth dongle due to the freezing issues caused by the on-board Bluetooth.
    이 문구 말씀이시군요.
    영어가 짧아서 그낭 지나쳐 버렸네요 ;;
    이 사람은 블루투스 동글을 사용하였다고 하는거같은데 내부 블루투스를 사용하려면
    말씀 주신거 처럼 mini uart을 설정해야한다는 말씀이신가요?


  • Global Moderator

    @ggumt 회사라 눈치가 좀 보이네여 ㅋ

    라즈베리파이 모델 3B , Raspbian Jessie OS에서 GPS 모듈 사용하기 포스트 내용에 보시면, 중간 부분에 mini_uart 활성화를 통해 기존 블루투스 포트를 이동하는 옵션이 있습니다.

    이 부분으로 적용을 하시길 권유 드립니다.

    [참고]



  • @Jae-Sang-Lee 답변 정말 감사합니다 ㅎㅎㅎ 말씀하신 부분 전부 확인해보고 다시 답글 드리도록 하겠습니다


  • Global Moderator

    @ggumt 잠시 휴식 시간을 가지면서 @ggumt 님과 관련된 문제점을 해결한 방안이 있어 공유 합니다.

    $ sudo nano /bin/connect-bluetooth.sh

    #!/bin/bash
    sudo bluetoothctl << EOF
     power on
     connect [MAC Address]
     exit
    EOF
    
    while (sleep 20)
    do
     sudo bluetoothctl << EOF
      power on
      connect [MAC Address]
      exit
     EOF
    done
    

    $ sudo chmod +x /bin/connect-bluetooth.sh

    이후, crontab 을 이용 해 자동 실행 되도록 적용 하시면 되시지 싶습니다.

    [참고]



  • @Jae-Sang-Lee

    rc-local.service 에 넣은 서술한 세션의 내용입니다.

    retropie:/etc/systemd/system# vim rc-local.service

    [Unit]
    Description=/etc/rc.local Compatibility
    After=network.target

    [Service]
    Type=forking
    ExecStart=/etc/rc.local start
    TimeoutSec=0
    RemainAfterExit=yes
    SysVStartPriority=99

    [install]
    WantedBy=multi-user.target

    실제로 어떤 의미로 사용하는건지는 잘 모르겠습니다. 우선은 인터넷에서 올라온 것을 그대로 써넣었는데요

    [install]
    WantedBy=multi-user.target

    이것이 systemctl enable rc-local시 나타나는 안내문에 나타난것과 관계가 있다는것을 알았습니다.
    그래도 세션을 적었음에도 불구하고 문제가 발생합니다.

    root@retropie:/etc/systemd/system# systemctl enable rc-local
    The unit files have no [Install] section. They are not meant to be enabled
    using systemctl.
    Possible reasons for having this kind of units are:

    1. A unit may be statically enabled by being symlinked from another unit’s
      .wants/ or .requires/ directory.
    2. A unit’s purpose may be to act as a helper for some other unit which has
      a requirement dependency on it.
    3. A unit may be started when needed via activation (socket, path, timer,
      D-Bus, udev, scripted systemctl call, …).

    connect-bluetooth.sh 파일을 만들어서 clontab에 적용하여봤는데요 이것도 효과는 없네요 ;;; 그래서 레트로파이 버전을 바꿔 볼까합니다.



  • @Jae-Sang-Lee

    말씀대로 레트로파이의 버전을 바꾸고 config.txt 에서 mini-uart에 대한 내용을 추가해보았습니다.
    여전히 자동으로 실행은 안하네요. 아래는 버전을 바꾸고 처음부터 다시 설치한 과정입니다.

    레트로파이 3.8.1 버전 이미지를 설치, 무선 인터넷 설정을 끝낸 후에

    내장 블루투스 사용을 위해

    sudo vim /boot/config.txt

    마지막 라인에 추가로
    core_freq=250
    enable_uart=1
    dtoveraly=pi3-mini uart-bt

    이런식으로 적어주었습니다. 그 다음

    ds4drv설치에서
    출처 : https://github.com/retropie/retropie-setup/wiki/Setting-up-a-PS4-controller

    #Disables On-Board Bluetooth
    dtoverlay=pi3-disable-bt

    이부분은 내부 bluetooth동작을 억제하는거 같아서 생략하고

    ds4drv를 설치하는 부분

    sudo apt-get install python3
    sudo pip install ds4drv

    wget https://raw.githubusercontent.com/chrippa/ds4drv/master/udev/50-ds4drv.rules
    sudo mv 50-ds4drv.rules /etc/udev/rules.d/
    sudo udevadm control --reload-rules
    sudo udevadm trigger

    이런 과정을 거치면 모든 설치가 끝나고

    ds4drv --led ff0000

    를 입력하면 듀얼쇼크4가 붉은 색으로 페어링이 되는것을 확인 하였습니다.
    그리고 레트로파이에서 키설정 후 동작하는것 까지 확인 하였습니다.

    자동 실행을 하기위해
    crontab를 설정하였습니다.

    crontab -e 명령어를 입력하고

    @reboot /usr/local/bin/ds4drv &

    이런식으로 서술하였습니다.

    그다음에 재시작을하면 분명 자동으로 실행될거라고 생각했는데 자동으로 시작이 안되네요;;;


  • Global Moderator

    @ggumt 마지막 즈음 내용에 보니, ds4drv --led ff0000 커맨드 입력으로 페어링을 성공한 것으로 나오시는데,

    crontab 에서도

    @reboot /usr/local/bin/ds3drv --led ff0000 &
    

    로 등록하신 거죠 ?

    저도 이건 정확히 해 보면서 답을 드려야 하지 싶네여…
    ps4 패드가 없으니 주변에 확인을 좀 해 봐야 겠네요.


답글을 작성하기 위해 로그인
 

Rasplay Forum 사이트로의 연결이 끊어졌습니다. 다시 연결을 시도하는동안 잠시만 기다려 주십시오.