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

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

내가 여기서 말하는 것은 끔찍한 조합이다.Optirun/Primusrun + PlayonLinux + 스팀래퍼 위의 래퍼 위에 래퍼를 만듭니다(primus/optirun은 playonlinux를 호출하고, 이는 여러 래퍼 스크립트를 통해 와인을 호출하고, 차례로 Steam을 호출하고, 최종적으로 게임 실행 파일을 호출합니다).

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

내 경우에는 문제의 게임은오디오서프(이름의 첫 번째), 다른 게임(예: Skyrim)을 같은 방식으로 실행하는 데에도 관심이 있습니다.

사실

내가 확신하는 것은 게임이 실행된다는 것이다. 하지만 NVIDIA 카드에는 없습니다.
나는 다음과 같은 어리석은 테스트를 수행했습니다.

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

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

  2. Bumblebee에서 glxgears 실행
    primusrun glxgears

  3. 계속 실행하는 동안 glxgears꿀벌이 있는지 다시 확인하세요.
    systemctl status bumblebeed

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

    예상대로 이제 glxgearsnvidia 카드에서 실행되는 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하고 파일을 저장하면 됩니다. 문제가 발생하면 위에서 언급한 다양한 접두사를 모두 사용해 보세요.

관련 정보