Proton เป็นเครื่องมือสำหรับใช้กับไคลเอนต์ Steam ซึ่งอนุญาตให้เกมที่เป็นเอกสิทธิ์ของ Windows ทำงานบนระบบปฏิบัติการ Linux ใช้ไวน์เพื่ออำนวยความสะดวกในเรื่องนี้
ผู้ใช้ส่วนใหญ่ควรใช้ Proton ที่ไคลเอนต์ Steam มอบให้เอง ดูโพสต์ชุมชน Steam นี้สำหรับรายละเอียดเพิ่มเติม
ซอร์สโค้ดมีไว้เพื่อให้ผู้ใช้ขั้นสูงสามารถปรับเปลี่ยนโปรตอนได้ ตัวอย่างเช่น ผู้ใช้บางรายอาจต้องการใช้ไวน์เวอร์ชันอื่นกับชื่อเฉพาะ
บันทึกการเปลี่ยนแปลง มีอยู่ในวิกิของเรา
รับแหล่งที่มาของ Proton โดยการโคลน https://github.com/ValveSoftware/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 ระดับบนสุดซึ่งจะรันคำสั่ง build ส่วนใหญ่ให้กับคุณ
หลังจากตรวจสอบพื้นที่เก็บข้อมูลและอัปเดตโมดูลย่อยแล้ว โดยสมมติว่าคุณมีการตั้งค่า Docker หรือ Podman ที่ใช้งานได้ คุณสามารถสร้างและติดตั้ง Proton ได้อย่างง่ายดาย:
make install
หากระบบบิลด์ของคุณขาดการพึ่งพา ระบบจะล้มเหลวอย่างรวดเร็วพร้อมข้อความแสดงข้อผิดพลาดที่ชัดเจน
หลังจากการสร้างเสร็จสิ้น คุณอาจต้องรีสตาร์ทไคลเอนต์ Steam เพื่อดูเครื่องมือ Proton ใหม่ ชื่อของเครื่องมือในไคลเอนต์ Steam จะขึ้นอยู่กับสาขาที่เช็คเอาท์ในปัจจุบันของ Proton คุณสามารถแทนที่ชื่อนี้ได้โดยใช้ตัวแปร build_name
ดู make help
สำหรับเป้าหมายและตัวเลือกบิลด์อื่นๆ
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
การรัน configure.sh
จะสร้าง Makefile
ที่ให้คุณสร้าง Proton ได้ สคริปต์จะตรวจสอบว่าคอนเทนเนอร์ทำงานได้หรือไม่ และแจ้งให้คุณทราบว่าการพึ่งพาฝั่งโฮสต์ขาดหายไปหรือไม่ คุณควรรันคำสั่งจากไดเร็กทอรีที่สร้างขึ้นสำหรับรุ่นของคุณโดยเฉพาะ
สคริปต์การกำหนดค่าพยายามค้นหาการตั้งค่า Docker หรือ Podman ที่ใช้งานได้ แต่คุณสามารถบังคับใช้เอ็นจิ้นที่เข้ากันได้กับ --container-engine=<executable_name>
คุณสามารถเปิดใช้งาน ccache ด้วย --enable-cache
flag สิ่งนี้จะเมานต์ $CCACHE_DIR
หรือ $HOME/.ccache
ของคุณภายในคอนเทนเนอร์
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
สามารถใช้เพื่อสร้างด้วยอิมเมจ Proton SDK เวอร์ชันแบบกำหนดเองได้
ตรวจสอบ --help
สำหรับตัวเลือกการกำหนดค่าอื่นๆ
หมายเหตุ: หากมีการใช้งาน SELinux คอนเทนเนอร์ Proton build อาจไม่สามารถเข้าถึงไฟล์ของผู้ใช้ของคุณได้ สาเหตุนี้มีสาเหตุมาจากป้ายกำกับระบบไฟล์ของ SELinux คุณสามารถส่งสวิตช์ --relabel-volumes
เพื่อกำหนดค่าเพื่อให้เอ็นจิ้นคอนเทนเนอร์ทำการติดฉลากใหม่ของการผูกและอนุญาตให้เข้าถึงไฟล์เหล่านั้นจากภายในคอนเทนเนอร์ สิ่งนี้อาจเป็นอันตรายได้เมื่อใช้กับไดเร็กทอรีระบบ ดำเนินการด้วยความระมัดระวังและดูคู่มือเครื่องยนต์คอนเทนเนอร์ของคุณ
make
เป้าหมายการสร้างที่สำคัญ:
make install
- ติดตั้ง Proton ลงในไดเร็กทอรี Steam ของผู้ใช้ของคุณ โปรดดูรายละเอียดในส่วนการติดตั้ง Proton ในเครื่อง
make redist
- สร้าง build แจกจ่ายซ้ำ ( redist/
) ที่สามารถคัดลอกไปยัง ~/.steam/root/compatibilitytools.d/
make deploy
- สร้างโครงสร้างการปรับใช้ ( deploy/
) นี่คือสิ่งที่เราใช้ในการปรับใช้ Proton ให้กับผู้ใช้ Steam ผ่านทาง Steamworks
make module=<module> module
- สร้างโมดูลไวน์ที่ระบุทั้งเวอร์ชัน 32 และ 64 บิต ซึ่งช่วยให้สามารถวนซ้ำอย่างรวดเร็วในโมดูลเดียว เป้าหมายนี้จะมีประโยชน์หลังจากสร้างโปรตอนเท่านั้น
make dxvk
/ make vkd3d-proton
- สร้าง DXVK / vkd3d-proton ใหม่
เพื่อป้องกันการลอกสัญลักษณ์ ให้เพิ่ม UNSTRIPPED_BUILD=1
ในการร้องขอ make
ควรใช้กับไดเร็กทอรี clean build เท่านั้น
เช่น:
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
Steam มาพร้อมกับ Proton หลายเวอร์ชัน ซึ่งเกมจะใช้เป็นค่าเริ่มต้นหรือคุณสามารถเลือกได้ในหน้าการเล่น Steam ของการตั้งค่า Steam Steam ยังรองรับการรันเกมที่มี Proton บิลด์ในเครื่อง ซึ่งคุณสามารถติดตั้งบนเครื่องของคุณได้
หากต้องการติดตั้ง Proton บิลด์ในเครื่องลงใน Steam ให้สร้างไดเร็กทอรีใหม่ใน ~/.steam/root/compatibilitytools.d/
ด้วยชื่อเครื่องมือที่คุณเลือก และวางไดเร็กทอรีที่มีบิลด์ที่สามารถแจกจ่ายต่อได้ของคุณไว้ใต้พาธนั้น
เป้าหมาย make install
จะดำเนินการนี้ให้กับคุณ โดยติดตั้ง Proton build ลงในโฟลเดอร์ Steam สำหรับผู้ใช้ปัจจุบัน คุณจะต้องรีสตาร์ทไคลเอนต์ 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 เวอร์ชันที่สร้างขึ้นให้กับผู้ใช้รายอื่น คุณต้องปฏิบัติตามข้อกำหนดของใบอนุญาตเหล่านี้
รุ่นโปรตอนจะถูกถอดสัญลักษณ์ออกตามค่าเริ่มต้น คุณสามารถสลับไปใช้สาขาเบต้า "debug" ใน Steam ได้ (ค้นหา Proton ในไลบรารีของคุณ คุณสมบัติ... -> เบต้า -> เลือก "debug") หรือบิลด์โดยไม่มีการแยกส่วน (ดูหัวข้อ Debug Builds)
สัญลักษณ์มีให้ผ่านไฟล์ .debug
ที่ให้มา ซึ่งอาจจำเป็นต้องโหลดโดยเครื่องมือแก้ไขจุดบกพร่องอย่างชัดเจน สำหรับ GDB มีสคริปต์ตัวช่วย wine/tools/gdbinit.py
(ที่มา) ที่ให้คำสั่ง load-symbol-files
(หรือ lsf
สั้น ๆ ) ซึ่งโหลดสัญลักษณ์สำหรับไฟล์ที่แมปทั้งหมด
สำหรับเคล็ดลับในการแก้ไขข้อบกพร่อง โปรดดูที่ docs/DEBUGGING.md
compile_commands.json
สำหรับใช้กับเซิร์ฟเวอร์ clangd LSP และเครื่องมือที่คล้ายกัน
โปรเจ็กต์ที่สร้างโดยใช้ cmake หรือ meson (เช่น vkd3d-proton) จะมาพร้อมกับ compile_commands.json
โดยอัตโนมัติ สำหรับเครื่องมืออัตโนมัติ (เช่น ไวน์) คุณต้องกำหนดค่าบิลด์ด้วย --enable-bear
ที่ใช้bear เพื่อสร้างฐานข้อมูลการคอมไพล์ โดยค่าเริ่มต้นจะไม่เปิดอยู่เนื่องจากจะทำให้การสร้างช้าลงเล็กน้อย
ระบบ build รวบรวมไฟล์ compile_commands.json ที่สร้างขึ้นทั้งหมดในไดเร็กทอรีย่อย build ชื่อ compile_commands/
เส้นทางถูกแปลให้ชี้ไปยังแหล่งที่มาจริง (เช่น ไม่ใช่สำเนาที่ซิงค์) ยังคงอาจขึ้นอยู่กับไดเร็กทอรี build สำหรับสิ่งต่างๆ เช่น config.h
ที่สร้างขึ้นโดยอัตโนมัติ และสำหรับ wine อาจเป็นประโยชน์ในการรัน 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 .
สามารถปรับโปรตอนขณะรันไทม์เพื่อช่วยให้เกมบางเกมทำงานได้ ไคลเอนต์ Steam ตั้งค่าตัวเลือกบางอย่างสำหรับเกมที่รู้จักโดยใช้ตัวแปร STEAM_COMPAT_CONFIG
คุณสามารถแทนที่ตัวเลือกเหล่านี้ได้โดยใช้ตัวแปรสภาพแวดล้อมที่อธิบายไว้ด้านล่าง
วิธีที่ดีที่สุดในการตั้งค่าการแทนที่สภาพแวดล้อมเหล่านี้สำหรับเกมทั้งหมดคือการเปลี่ยนชื่อ user_settings.sample.py
เป็น user_settings.py
และแก้ไขอย่างเหมาะสม ไฟล์นี้อยู่ในไดเร็กทอรีการติดตั้ง Proton ในไลบรารี Steam ของคุณ (มักจะเป็น ~/.steam/steam/steamapps/common/Proton #.#
)
หากคุณต้องการเปลี่ยนการกำหนดค่ารันไทม์สำหรับเกมใดเกมหนึ่ง คุณสามารถใช้การตั้งค่า Set Launch Options
ในกล่องโต้ตอบ Properties
ของเกมในไคลเอนต์ Steam ตั้งค่าตัวแปรตามด้วย %command%
ตัวอย่างเช่น ป้อน " PROTON_USE_WINED3D=1 %command%
" เพื่อใช้ตัวเรนเดอร์ wined3d ที่ใช้ OpenGL แทนตัวเรนเดอร์ DXVK ที่ใช้ Vulkan
หากต้องการเปิดใช้งานตัวเลือก ให้ตั้งค่าตัวแปรเป็นค่าที่ไม่ใช่ 0
หากต้องการปิดใช้งานตัวเลือก ให้ตั้งค่าตัวแปรเป็น 0
หากต้องการใช้การกำหนดค่าเริ่มต้นของ Steam ไม่ต้องระบุตัวแปรเลย
รายการด้านล่างนี้คือตัวเลือกรันไทม์ ไม่ส่งผลต่อการเปลี่ยนแปลงคำนำหน้าไวน์อย่างถาวร การลบตัวเลือกจะกลับไปใช้พฤติกรรมก่อนหน้า
สตริงการกำหนดค่าที่เข้ากันได้ | ตัวแปรสภาพแวดล้อม | คำอธิบาย |
---|---|---|
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 | ใช้ wined3d ที่ใช้ OpenGL แทน DXVK ที่ใช้ Vulkan สำหรับ d3d11, d3d10 และ d3d9 |
nod3d11 | PROTON_NO_D3D11 | ปิดการใช้งาน d3d11.dll สำหรับเกม d3d11 ที่สามารถถอยกลับและทำงานได้ดีขึ้นด้วย d3d9 |
nod3d10 | PROTON_NO_D3D10 | ปิดการใช้งาน d3d10.dll และ dxgi.dll สำหรับเกม d3d10 ที่สามารถถอยกลับและทำงานได้ดีขึ้นด้วย d3d9 |
dxvkd3d8 | PROTON_DXVK_D3D8 | ใช้ d3d8.dll ของ DXVK |
noesync | PROTON_NO_ESYNC | อย่าใช้พื้นฐานการซิงโครไนซ์ในกระบวนการที่ใช้ eventfd |
nofsync | PROTON_NO_FSYNC | อย่าใช้พื้นฐานการซิงโครไนซ์ในกระบวนการที่ใช้ futex (ปิดใช้งานโดยอัตโนมัติบนระบบที่ไม่รองรับ FUTEX_WAIT_MULTIPLE ) |
noxim | PROTON_NO_XIM | เปิดใช้งานตามค่าเริ่มต้น อย่าพยายามใช้การสนับสนุน XIM (X Input Methods) เป็นที่ทราบกันว่าการสนับสนุน XIM ทำให้เกิดข้อขัดข้องกับ libx11 ที่เก่ากว่าเวอร์ชัน 1.7 |
disablenvapi | PROTON_DISABLE_NVAPI | ปิดการใช้งานไลบรารีการสนับสนุน NVAPI GPU ของ NVIDIA |
nativevulkanloader | ใช้ตัวโหลด Vulkan ที่มาพร้อมกับเกมแทนตัวโหลด Vulkan ในตัวของ Proton ซึ่งจะทำให้การรองรับ VR หยุดชะงัก แต่บางเกมจำเป็นต้องใช้ | |
forcelgadd | PROTON_FORCE_LARGE_ADDRESS_AWARE | บังคับให้ไวน์เปิดใช้งานการตั้งค่าสถานะ LARGE_ADDRESS_AWARE สำหรับไฟล์ปฏิบัติการทั้งหมด เปิดใช้งานตามค่าเริ่มต้น |
heapdelayfree | PROTON_HEAP_DELAY_FREE | ชะลอการเพิ่มหน่วยความจำบางส่วน เพื่อแก้ไขข้อบกพร่องในการใช้งานแอปพลิเคชันหลังจากใช้งานฟรี |
gamedrive | PROTON_SET_GAME_DRIVE | สร้างไดรฟ์ S: ซึ่งชี้ไปที่คลัง Steam ซึ่งมีเกมอยู่ |
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 เนื่องจาก blit อยู่ข้างหลังหนึ่งเฟรม |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | บังคับให้ Nvidia GPUs รายงานเป็น AMD GPUs เสมอ เกมบางเกมจำเป็นต้องทำเช่นนี้หากขึ้นอยู่กับฟังก์ชันไดรเวอร์ Nvidia ของ Windows เท่านั้น ดูเพิ่มเติมที่การกำหนดค่า nvapiHack ของ DXVK ซึ่งส่งผลต่อการรายงานจาก Direct3D เท่านั้น |
WINE_FULLSCREEN_INTEGER_SCALING | เปิดใช้งานโหมดการปรับขนาดจำนวนเต็มเพื่อให้พิกเซลคมชัดเมื่อขยายขนาด | |
cmdlineappend: | ผนวกสตริงหลังเครื่องหมายโคลอนเพื่อเป็นอาร์กิวเมนต์ให้กับคำสั่งเกม สามารถระบุได้มากกว่าหนึ่งครั้ง หลีกเลี่ยงเครื่องหมายจุลภาคและแบ็กสแลชด้วยแบ็กสแลช | |
xalia | PROTON_USE_XALIA | เปิดใช้งาน Xalia ซึ่งเป็นโปรแกรมที่สามารถเพิ่ม UI ของเกมแพดสำหรับอินเทอร์เฟซของแป้นพิมพ์/เมาส์บางตัว |
seccomp | PROTON_USE_SECCOMP | หมายเหตุ: ล้าสมัยใน Proton 5.13 ในเวอร์ชันเก่า ให้เปิดใช้งานตัวกรอง seccomp-bpf เพื่อจำลอง syscalls ดั้งเดิม ซึ่งจำเป็นสำหรับการป้องกัน DRM บางอย่างในการทำงาน |
d9vk | PROTON_USE_D9VK | หมายเหตุ: ล้าสมัยใน Proton 5.0 ในเวอร์ชันเก่า ให้ใช้ DXVK ที่ใช้ Vulkan แทน wined3d ที่ใช้ OpenGL สำหรับ d3d9 |