Proton 은 Windows 전용 게임을 Linux 운영 체제에서 실행할 수 있도록 해주는 Steam 클라이언트와 함께 사용하기 위한 도구입니다. 이를 촉진하기 위해 Wine을 사용합니다.
대부분의 사용자는 Steam 클라이언트 자체에서 제공하는 Proton을 사용해야 합니다. 자세한 내용은 Steam 커뮤니티 게시물을 참조하세요.
고급 사용자가 Proton을 변경할 수 있도록 소스 코드가 제공됩니다. 예를 들어, 일부 사용자는 특정 제목을 가진 다른 버전의 Wine을 사용하기를 원할 수 있습니다.
변경 내역은 위키에서 확인할 수 있습니다.
https://github.com/ValveSoftware/Proton을 복제하고 원하는 브랜치를 확인하여 Proton의 소스를 획득하세요.
다음 명령을 사용하여 최신 Proton을 시스템에 복제할 수 있습니다.
git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton
분기 간 전환 시 하위 모듈을 업데이트해야 합니다.
git checkout experimental_6.3
git submodule update --init --recursive
하위 구성 요소를 변경하려면 지금이 바로 변경해야 할 때입니다. 예를 들어, Wine을 변경하려면 이를 wine/
디렉터리에 적용하면 됩니다.
대부분의 Proton은 호스트 측에 대한 종속성이 거의 없이 Proton SDK 컨테이너 내부에 빌드됩니다.
Docker 또는 Podman 설정이 필요합니다. 뿌리 없는 Podman 설정을 적극 권장합니다. 설정 지침은 배포판 설명서를 참조하세요(예: Arch Podman/Docker, Debian Podman/Docker).
우리는 대부분의 빌드 명령을 실행하는 최상위 Makefile을 제공합니다.
Docker 또는 Podman 설정이 작동 중이라고 가정하고 리포지토리를 확인하고 하위 모듈을 업데이트한 후 다음과 같은 간단한 방법으로 Proton을 빌드하고 설치할 수 있습니다.
make install
빌드 시스템에 종속성이 누락된 경우 명확한 오류 메시지와 함께 빠르게 실패합니다.
빌드가 완료된 후 새로운 Proton 도구를 보려면 Steam 클라이언트를 다시 시작해야 할 수도 있습니다. Steam 클라이언트의 도구 이름은 현재 체크아웃된 Proton 분기를 기반으로 합니다. build_name
변수를 사용하여 이 이름을 재정의할 수 있습니다.
다른 빌드 대상 및 옵션에 대한 make help
참조하세요.
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
configure.sh
실행하면 Proton을 빌드할 수 있는 Makefile
생성됩니다. 스크립트는 컨테이너가 작동하는지 확인하고 호스트 측 종속성이 누락된 경우 메시지를 표시합니다. 빌드를 위해 특별히 생성된 디렉터리에서 명령을 실행해야 합니다.
구성 스크립트는 사용할 작동 중인 Docker 또는 Podman 설정을 검색하려고 시도하지만 --container-engine=<executable_name>
사용하여 호환 엔진을 강제로 적용할 수 있습니다.
--enable-cache
플래그를 사용하여 ccache를 활성화할 수 있습니다. 그러면 $CCACHE_DIR
또는 $HOME/.ccache
가 컨테이너 내부에 마운트됩니다.
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
Proton SDK 이미지의 사용자 정의 버전으로 빌드하는 데 사용할 수 있습니다.
다른 구성 옵션에 대해서는 --help
확인하세요.
참고: SELinux를 사용 중인 경우 Proton 빌드 컨테이너가 사용자 파일에 액세스하지 못할 수 있습니다. 이는 SELinux의 파일 시스템 레이블로 인해 발생합니다. --relabel-volumes
스위치를 구성에 전달하여 컨테이너 엔진이 바인딩 마운트에 레이블을 다시 지정하고 컨테이너 내에서 해당 파일에 대한 액세스를 허용하도록 할 수 있습니다. 시스템 디렉토리와 함께 사용하면 위험할 수 있습니다. 주의해서 진행하고 컨테이너 엔진 매뉴얼을 참조하세요.
make
중요한 메이크 타겟:
make install
- Proton을 사용자의 Steam 디렉터리에 설치합니다. 자세한 내용은 로컬에 Proton 설치 섹션을 참조하세요.
make redist
- ~/.steam/root/compatibilitytools.d/
에 복사할 수 있는 재배포 빌드( redist/
)를 생성합니다.
make deploy
- 배포 빌드를 생성합니다( deploy/
). 이것이 Steamworks를 통해 Steam 사용자에게 Proton을 배포하는 데 사용되는 것입니다.
make module=<module> module
- 지정된 와인 모듈의 32비트 및 64비트 버전을 모두 빌드합니다. 이를 통해 하나의 모듈에서 빠른 반복이 가능합니다. 이 목표는 Proton을 구축한 후에만 유용합니다.
make dxvk
/ make vkd3d-proton
- DXVK / vkd3d-proton을 다시 빌드합니다.
기호 제거를 방지하려면 make
호출에 UNSTRIPPED_BUILD=1
추가하세요. 이는 깨끗한 빌드 디렉터리에서만 사용해야 합니다.
예:
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
Steam에는 게임이 기본적으로 사용하거나 Steam 설정의 Steam 플레이 페이지에서 선택할 수 있는 여러 버전의 Proton이 포함되어 있습니다. Steam은 또한 컴퓨터에 설치할 수 있는 Proton의 로컬 빌드로 게임 실행을 지원합니다.
Proton의 로컬 빌드를 Steam에 설치하려면 선택한 도구 이름을 사용하여 ~/.steam/root/compatibilitytools.d/
에 새 디렉터리를 만들고 재배포 가능 빌드가 포함된 디렉터리를 해당 경로 아래에 배치하세요.
make install
타겟이 이 작업을 수행하여 현재 사용자의 Steam 폴더에 Proton 빌드를 설치합니다. 새 도구를 선택하려면 Steam 클라이언트를 다시 시작해야 합니다.
올바른 로컬 도구 설치는 다음과 유사해야 합니다.
compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
├── filelock.py
├── LICENSE
├── proton
├── proton_dist.tar
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
Steam에서 로컬 빌드를 활성화하려면 설정 창의 Steam Play 섹션으로 이동하세요. 빌드가 올바르게 설치된 경우 호환성 도구 드롭다운 목록에 "proton-localbuild"가 표시됩니다.
이 소프트웨어의 각 구성 요소는 해당 라이센스 조건에 따라 사용됩니다. 자세한 내용은 여기의 LICENSE
파일과 각 하위 모듈 및 디렉터리의 LICENSE
, COPYING
등의 파일을 참조하세요. Proton의 구축된 버전을 다른 사용자에게 배포하는 경우 해당 라이선스의 조건을 준수해야 합니다.
Proton 빌드에는 기본적으로 기호가 제거되어 있습니다. Steam에서 "디버그" 베타 브랜치로 전환하거나(라이브러리에서 Proton 검색, 속성... -> BETAS -> "디버그" 선택) 제거하지 않고 빌드할 수 있습니다(디버그 빌드 섹션 참조).
기호는 디버깅 도구에서 명시적으로 로드해야 할 수 있는 .debug
파일을 통해 제공됩니다. GDB의 경우 매핑된 모든 파일에 대한 기호를 로드하는 load-symbol-files
(또는 줄여서 lsf
) 명령을 제공하는 도우미 스크립트 wine/tools/gdbinit.py
(소스 제공)가 있습니다.
디버깅에 대한 팁은 docs/DEBUGGING.md를 참조하세요.
compile_commands.json
clangd LSP 서버 및 유사한 도구와 함께 사용됩니다.
cmake 또는 meson(예: vkd3d-proton)을 사용하여 빌드된 프로젝트는 자동으로 compile_commands.json
과 함께 제공됩니다. autotools(예: wine)의 경우 Bear를 사용하여 컴파일 데이터베이스를 생성하는 --enable-bear
로 빌드를 구성해야 합니다. 빌드가 약간 느려지므로 기본적으로 켜져 있지 않습니다.
빌드 시스템은 생성된 모든 compile_commands.json 파일을 compile_commands/
빌드 하위 디렉터리에 수집합니다.
경로는 실제 소스(즉, 재동기화된 복사본이 아님)를 가리키도록 변환됩니다. 자동 생성된 config.h
와 같은 작업은 여전히 빌드 디렉토리에 따라 달라질 수 있으며 와인의 경우 변경 사항이 커밋되지 않으므로 소스 디렉토리에서 tools/make_requests
실행하는 것이 도움이 될 수 있습니다.
그런 다음 몇 가지 방법으로 clangd에 해당 파일을 사용하도록 편집기를 구성할 수 있습니다.
compile_commands.json
의 경로를 지정할 수 있습니다..clangd
파일을 통해, 예: cd src/proton/wine/
cat > .clangd << EOF
CompileFlags:
CompilationDatabase: ../build/current-dev/compile_commands/wine64/
EOF
ln -s ../build/current-dev/compile_commands/wine64/compile_commands.json .
Proton은 특정 게임 실행을 돕기 위해 런타임에 조정될 수 있습니다. Steam 클라이언트는 STEAM_COMPAT_CONFIG
변수를 사용하여 알려진 게임에 대한 몇 가지 옵션을 설정합니다. 아래에 설명된 환경 변수를 사용하여 이러한 옵션을 재정의할 수 있습니다.
모든 게임에 대해 이러한 환경 재정의를 설정하는 가장 좋은 방법은 user_settings.sample.py
user_settings.py
로 바꾸고 적절하게 수정하는 것입니다. 이 파일은 Steam 라이브러리의 Proton 설치 디렉터리(보통 ~/.steam/steam/steamapps/common/Proton #.#
)에 있습니다.
특정 게임의 런타임 구성을 변경하려면 Steam 클라이언트의 게임 Properties
대화 상자에서 Set Launch Options
설정을 사용하면 됩니다. 변수를 설정하고 그 뒤에 %command%
설정합니다. 예를 들어 Vulkan 기반 DXVK 렌더러 대신 OpenGL 기반 wined3d 렌더러를 사용하려면 " PROTON_USE_WINED3D=1 %command%
"를 입력합니다.
옵션을 활성화하려면 변수를 0
아닌 값으로 설정하십시오. 옵션을 비활성화하려면 변수를 0
으로 설정하십시오. Steam의 기본 구성을 사용하려면 변수를 전혀 지정하지 마세요.
아래는 모두 런타임 옵션입니다. Wine 접두사를 영구적으로 변경하지는 않습니다. 옵션을 제거하면 이전 동작으로 되돌아갑니다.
구성 문자열 호환 | 환경변수 | 설명 |
---|---|---|
PROTON_LOG | $PROTON_LOG_DIR/steam-$APPID.log 에 유용한 디버그 로그를 덤프하는 편리한 방법입니다. 기본 로깅을 활성화하려면 1 로 설정하고, 기본 WINEDEBUG 채널에 추가할 문자열로 설정합니다. | |
PROTON_LOG_DIR | 지정된 디렉터리에 로그 파일을 출력합니다. 기본값은 홈 디렉터리입니다. | |
PROTON_WAIT_ATTACH | 게임 프로세스를 시작하기 전에 디버거가 steam.exe에 연결될 때까지 기다리십시오. 시작 시 게임 프로세스에 연결하려면 디버거가 하위 프로세스를 따르도록 설정해야 합니다. | |
PROTON_CRASH_REPORT_DIR | 이 디렉터리에 충돌 로그를 기록합니다. 오래된 로그를 정리하지 않으므로 결국 디스크 공간을 모두 차지할 수 있습니다. | |
wined3d | PROTON_USE_WINED3D | d3d11, d3d10 및 d3d9에는 Vulkan 기반 DXVK 대신 OpenGL 기반 wined3d를 사용합니다. |
nod3d11 | PROTON_NO_D3D11 | d3d9로 대체되어 더 잘 실행될 수 있는 d3d11 게임의 경우 d3d11.dll 비활성화합니다. |
nod3d10 | PROTON_NO_D3D10 | d3d9로 대체되어 더 잘 실행될 수 있는 d3d10 게임의 경우 d3d10.dll 및 dxgi.dll 비활성화합니다. |
dxvkd3d8 | PROTON_DXVK_D3D8 | DXVK의 d3d8.dll 사용하십시오. |
noesync | PROTON_NO_ESYNC | eventfd 기반 in-process 동기화 프리미티브를 사용하지 마십시오. |
nofsync | PROTON_NO_FSYNC | futex 기반 프로세스 내 동기화 프리미티브를 사용하지 마십시오. ( FUTEX_WAIT_MULTIPLE 지원하지 않는 시스템에서는 자동으로 비활성화됩니다.) |
noxim | PROTON_NO_XIM | 기본적으로 활성화되어 있습니다. XIM(X 입력 방법) 지원을 사용하지 마십시오. XIM 지원은 버전 1.7보다 오래된 libx11과 충돌을 일으키는 것으로 알려져 있습니다. |
disablenvapi | PROTON_DISABLE_NVAPI | NVIDIA의 NVAPI GPU 지원 라이브러리를 비활성화합니다. |
nativevulkanloader | Proton에 내장된 Vulkan 로더 대신 게임과 함께 제공되는 Vulkan 로더를 사용하세요. 이로 인해 VR 지원이 중단되지만 일부 게임에서는 필요합니다. | |
forcelgadd | PROTON_FORCE_LARGE_ADDRESS_AWARE | Wine이 모든 실행 파일에 대해 LARGE_ADDRESS_AWARE 플래그를 활성화하도록 강제합니다. 기본적으로 활성화되어 있습니다. |
heapdelayfree | PROTON_HEAP_DELAY_FREE | 애플리케이션 사용 후 해제 버그를 해결하기 위해 일부 메모리 해제를 지연합니다. |
gamedrive | PROTON_SET_GAME_DRIVE | 게임이 포함된 Steam 라이브러리를 가리키는 S: 드라이브를 만듭니다. |
noforcelgadd | forcelgadd를 비활성화합니다. 이것과 forcelgadd 모두 설정되면 활성화가 적용됩니다. | |
oldglstr | PROTON_OLD_GL_STRING | 매우 긴 확장 문자열에서 충돌이 발생하는 오래된 게임의 경우 GL 확장 문자열의 길이를 제한하도록 일부 드라이버 재정의를 설정하십시오. |
vkd3dfl12 | 드라이버 지원에 관계없이 Direct3D 12 기능 수준을 12로 강제 적용합니다. | |
vkd3dbindlesstb | force_bindless_texel_buffer VKD3D_CONFIG 에 넣습니다. | |
nomfdxgiman | WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER | 불완전한 IMFDXGIDeviceManager 지원으로 인해 일부 게임에서 비디오 문제를 해결하려면 해킹을 활성화하세요. |
noopwr | WINE_DISABLE_VULKAN_OPWR | 해킹을 활성화하면 Vulkan의 다른 프로세스 창 렌더링을 비활성화할 수 있습니다. 이 경우 블릿이 한 프레임 뒤쳐져 Wayland에서 문제가 발생하기도 합니다. |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | Nvidia GPU가 항상 AMD GPU로 보고되도록 강제합니다. 일부 게임은 Windows 전용 Nvidia 드라이버 기능에 의존하는 경우 이 기능이 필요합니다. Direct3D의 보고에만 영향을 미치는 DXVK의 nvapiHack 구성도 참조하세요. |
WINE_FULLSCREEN_INTEGER_SCALING | 업스케일링 시 선명한 픽셀을 제공하려면 정수 스케일링 모드를 활성화합니다. | |
cmdlineappend: | 게임 명령에 대한 인수로 콜론 뒤에 문자열을 추가합니다. 두 번 이상 지정할 수 있습니다. 백슬래시를 사용하여 쉼표와 백슬래시를 이스케이프 처리하세요. | |
xalia | PROTON_USE_XALIA | 일부 키보드/마우스 인터페이스에 게임패드 UI를 추가할 수 있는 프로그램인 Xalia를 활성화합니다. |
seccomp | PROTON_USE_SECCOMP | 참고: Proton 5.13에서는 더 이상 사용되지 않습니다. 이전 버전에서는 seccomp-bpf 필터를 활성화하여 일부 DRM 보호가 작동하는 데 필요한 기본 syscall을 에뮬레이트합니다. |
d9vk | PROTON_USE_D9VK | 참고: Proton 5.0에서는 더 이상 사용되지 않습니다. 이전 버전에서는 d3d9용 OpenGL 기반 wined3d 대신 Vulkan 기반 DXVK를 사용합니다. |