Bumblebee에서 Windows 게임용 Steam을 실행하는 방법은 무엇입니까?

Bumblebee에서 Windows 게임용 Steam을 실행하는 방법은 무엇입니까?

여기서는 끔찍한 조합에 대해 이야기하고 있습니다.Optirun/Primusrun + PlayonLinux + 스팀이렇게 하면 래퍼 재정의 래퍼 재정의 래퍼가 만들어집니다. (primus/optirun은 playonlinux를 호출하고, 이는 여러 래퍼 스크립트를 통해 wine을 호출하고, 다시 steam을 호출하여 궁극적으로 게임 실행 파일을 호출합니다.)

그리고 아니요, 잘 작동하지 않습니다.

내 경우에는 문제의 게임은오디오 서핑(이름의 첫 번째 항목). 물론 다른 게임(예: Skyrim)도 같은 방식으로 작동하도록 하는 데 관심이 있습니다.

사실

나는 게임이 성공할 것이라고 확신합니다. 하지만 NVIDIA 카드에는 없습니다.
나는 다음과 같은 어리석은 테스트를 수행했습니다.

  1. Bumblebee 데몬의 상태를 확인하세요.
    systemctl status bumblebeed
    CGroup 라인을 관찰하세요.

    C그룹:/system.slice/bumblebeed.service
                  └─809 /usr/sbin/bumblebeed

  2. Bumblebee에서 glxgear 실행
    primusrun glxgears

  3. 실행하는 동안 glxgearsBumblebee를 다시 확인하세요.
    systemctl status bumblebeed

    C그룹: /system.slice/bumblebeed.service
                  ├─ 809 /usr/sbin/bumblebeed
                  └─3707 Xorg :8 -config /etc/bumblebee/xorg.conf.nvidia -configdir ...

    glxgears예상대로 이제 nvidia 카드에서 실행되는 bumblebee에 의해 생성된 X 서버 인스턴스가 있습니다.

  4. 중지 glxgears하고 다시 확인하세요. X.org 인스턴스가 사라졌습니다.

  5. 지금 시작하세요스팀 게임통과하다primusrun
    primusrun /usr/share/playonlinux/playonlinux --run "Steam" -applaunch 12900

  6. 그리고 Bumblebee의 상태를 확인하세요. 1단계로 돌아가서 Xorg 하위 키가 없습니다. (이 작업을 수행할 때는 메뉴뿐만 아니라 항상 게임에 있어야 합니다.)

프로그램이 그래픽 카드를 사용하지 않으면 Xorg 인스턴스가 생성되지 않는 반면 optirun은 어떻게든 Worg를 인스턴스화하기 때문에 primusrun을 사용합니다.

나도 그랬어멈추다게임이 아직 실행 중인지 확인하기 위한 범블비 데몬(이렇게 하지 마세요! 프로그램이 nvidia 카드에서 실행되는 경우 창을 정지시킬 뿐만 아니라 GPU도 정지시킵니다)

추측하다

그렇습니다. 게임은 Bumblebee에서 실행되지 않습니다. 그런데 문제가 무엇입니까?

이는 래퍼 중 하나가 어딘가에서 새 프로세스를 생성하고 반환하기 때문일 것입니다.primusrun이 대상 프로세스에 액세스하지 못하도록 합니다. 그러나 누구의 책임입니까?
playonlinux에서 사용하는 여러 래퍼 중 하나입니까? 아니면 그냥 스팀?

아니면 이보다 더 깊을 수도 있습니다.Audiosurf가 OpenGL을 전혀 사용하지 않으면 어떻게 되나요?당연히 아니지출신지, 하지만 와인은 DirectX 호출을 OpenGL 호출로 변환하지 않습니까?


이러한 비관적인 가정을 제쳐두고, primusrun을 호출하기 전에 실행 파일에 최대한 가까워야 한다고 생각합니다. 이상적인 상황은 이것입니다 primusrun wine game.exe.

그럼 어떻게 해야 하나요?

글쎄요, 우선 "프로그램을 실행하기 전에 명령 실행"을 했습니다.다양한 종류그림과 같이 playonlinux 구성 창의 " 탭이 줄:

이 상자를 사용하여 바로가기에 명령 접두사를 추가할 수 있습니다. 이는 Nvidia 및 Intel 그래픽 카드가 장착된 노트북에 편리합니다. 예를 들어 특정 게임을 시작하기 전에 접두사 primusrun 또는 optirun을 사용해야 하는 경우입니다.

그러나 이것은 완전히 말도 안되는 것으로 밝혀졌습니다

PlayonLinux 소스 코드를 조금 조사한 후 다음과 같은 내용을 발견했습니다.

if [ -e "$HOME/.PlayOnLinux/configurations/pre_shortcut/$NAME" ]; then source "$HOME/.PlayOnLinux/configurations/pre_shortcut/$NAME" fi exec ./playonlinux-bash "$HOME/.PlayOnLinux/shortcuts/$NAME" "$@"

$HOME/.PlayOnLinux/configurations/pre_shortcut/$NAME파일에는 "프로그램을 실행하기 전에 실행할 명령" 필드가 저장됩니다. 보시다시피 이 파일은 sourced입니다. 이는 많은 일을 할 수 있다는 것을 의미합니다.앞으로exec프로그램을 실행하려면( 명령의 마지막 줄 이 됨 )~처럼당신은 그것을 실행하고 있습니다.

그래서이 상자에 포장지를 부르는 것은 primusrun공기를 두드리는 것과 같습니다.

그러나 더 나아가서 나는 그 안에 실제 .exe 파일이 뒤따르는 $HOME/.PlayOnLinux/shortcuts/$NAME함수에 대한 호출이 포함되어 있다는 사실도 발견했습니다 POL_Wine. 이는 POL에서 사용하는 래퍼 체인으로 이해됩니다.

하단 음표

자세히 설명하면 주제에서 많이 벗어났다는 것을 알지만, 실제로 의미하는 바는 이 질문에 아직 Linux에서 기본적으로 사용할 수 없는 Steam 게임이 포함되어 있으며 동일한 문제가 있을 수 있다는 것입니다. 여기서 질문을 바꿔보세요(단순히 "당신은 할 수 있습니다"라고 대답하지 마세요)이것Audiosurf와 함께 작동하도록 해킹하세요."):

  • primusrun/ 를 사용할 때 별도의 nvidia 카드에서 게임이 실행되지 않는 이유는 무엇입니까 optirun?
  • 이 문제를 해결하려면 어떻게 해야 합니까?

답변1

두 번째 질문에 답해 드리겠습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

우리가 원하는 것은 optirun/primusrun 접두어를 사용하여 PlayonLinux를 통해 Steam을 실행하는 것입니다. Steam을 통해 실행하는 모든 게임도 이와 같이 자동으로 실행됩니다.

우린 꼭 가야 해/usr/share/playonlinux/lib/

거기에 파일이 있고 wine.lib우리는 그것을 편집할 것입니다.

중요: 문제가 발생할 경우를 대비해 이 파일의 백업을 만드세요.

이 파일 안에는 이라는 함수가 있습니다 POL_Wine ().

기본적으로 이 함수에서 우리가 바꾸고 싶은 것은 PlayonLinux를 통해 애플리케이션이 실행될 때마다 와인이 실행되는 방식입니다.

따라서 이 함수에서는 와인을 호출하는 모든 부분을 찾아야 합니다. wine "$@"즐겨 사용하는 텍스트 편집기에서 Ctrl+F를 사용하여 파일을 찾으세요. 내 파일에는 3번이나 나타납니다 wine "$@".

나는 방금 각 발생 전에 추가하여 primusrun그렇게 보이도록 했습니다 primusrun wine "$@". 여러분도 그렇게 할 수 있지만 optirun이것은 optirun -b primusprimusrun에게 효과적이었습니다.

편집한 섹션은 현재 다음과 같습니다.

if [ "$POL_OS" = "Linux" ] || [ "$POL_OS" = "Mac" ];
then
    if [ "$LOGFILE" = "/dev/null" ]; then
        $BEFORE_WINE $(POL_Config_Read BEFORE_WINE) primusrun wine "$@"  2> >(grep -v menubuilder --line-buffered | tee -a "$WINEPREFIX/playonlinux.log" >&2) > >(tee -a "$WINEPREFIX/playonlinux.log")
        errors=$?
    else
        $BEFORE_WINE $(POL_Config_Read BEFORE_WINE) primusrun wine "$@" 2> >(grep -v menubuilder --line-buffered | tee -a "$LOGFILE" "$WINEPREFIX/playonlinux.log" >&2) > >(tee -a "$LOGFILE" "$WINEPREFIX/playonlinux.log")
        errors=$?
    fi
else
    # FIXME 
    $BEFORE_WINE $(POL_Config_Read BEFORE_WINE) primusrun wine "$@"  2> "$WINEPREFIX/playonlinux.log" > "$WINEPREFIX/playonlinux.log"
    errors=$?
fi

파일을 저장하고 정상적으로 PlayonLinux를 시작하세요.

터미널에서 다음 명령을 실행하면 개별 그래픽 카드가 사용되는지 언제든지 확인할 수 있습니다.

optirun --status

사용하지 않을 경우 출력은 다음과 같습니다.

Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is off.

PlayonLinux 애플리케이션에서 Steam을 선택하고 실행하세요. 시작되면 optirun --status독립형 카드가 활성화되었는지 확인하세요.

내 출력은 다음과 같습니다

Bumblebee status: Ready (3.2.1). X is PID 26685, 1 applications using bumblebeed.

엄청난! 이제 Steam이 독립형 카드를 사용하고 있습니다!

이제 Steam에서 게임을 실행해 보겠습니다. 하나를 선택하고 정상적으로 실행하세요(Steam에서 실행 옵션을 조작할 필요가 없습니다).

이중 점검 optirun --status. 출력은 다음과 같아야 합니다.

Bumblebee status: Ready (3.2.1). X is PID 26685, 2 applications using bumblebeed.

기이! 당신이 시작하는 게임도 당신의 독립형 카드를 사용하고 있습니다!

이것의 장점은 Steam뿐만 아니라 PlayonLinux를 통해 실행하는 모든 애플리케이션에서 작동한다는 것입니다.

변경 사항을 되돌리려면 생성한 백업 파일을 사용하거나 추가한 접두사를 제거 wine.lib하고 파일을 저장하면 됩니다. 문제가 있는 경우 위에서 언급한 다양한 접두사를 모두 사용해 보세요.

관련 정보