หนึ่งในฟังก์ชันที่มีประโยชน์มากของระบบปฏิบัติการก็คือการเอาพื้นที่เก็บข้อมูลในวงเน็ตเวิร์คเดียวกัน มาทำเสมือนเป็นหนึ่งในไดรฟ์เก็บข้อมูลของเครื่อง ทำให้ผู้ใช้สามารถเข้าถึง เรียกใช้ข้อมูลได้ง่ายเท่า ๆ กับเป็นไดรฟ์เก็บข้อมูลจริงในเครื่องเลย ซึ่งเหมาะมากกับการใช้งานร่วมกับอุปกรณ์ประเภท NAS ที่ตั้งไว้เพื่อเป็นคลังเก็บข้อมูล หรือแชร์ข้อมูลกลางร่วมกับผู้อื่นในออฟฟิศเดียวกัน แทนที่จะใช้โปรแกรมหรือเครื่องมือที่ทางผู้ผลิต NAS ออกแบบมา โดยคำที่ใช้เรียกฟังก์ชันนี้ที่หลายท่านรู้จักก็คือการ map network drive นั่นเอง
ในบทความนี้จะเป็นการแนะนำว่าวิธี map network drive ของสองระบบปฏิบัติการที่มีผู้ใช้ทั่วไปค่อนข้างมาก นั่นคือ Windows 11 (รวมถึง Windows รุ่นก่อนหน้า) และ macOS โดยทางฝั่ง Windows จะง่ายมาก ๆ เพราะหลังจากตั้งค่าครั้งแรกแล้ว เวลาเปิดเครื่องครั้งต่อไป ระบบก็จะ map กลับมาให้แบบอัตโนมัติ เพราะจะใช้การสร้าง shortcut ทิ้งไว้ให้ ส่วนจะเข้าถึงได้หรือไม่ก็ขึ้นอยู่กับเน็ตเวิร์คที่ใช้งานอยู่ในขณะนั้นอีกที
แต่ทางฝั่ง macOS อันนี้จัดว่าเป็น pain point ของผู้ใช้งานเลยทีเดียว เพราะตัว OS จะมีค่ากำหนดการ map network drive ให้แบบครั้งต่อครั้งเท่านั้น ทำให้หลังจากเปิดเครื่องใหม่ หรือเปลี่ยนกลับมาต่อเน็ตเวิร์คที่มี NAS ระบบจะยังไม่ map ให้ ทำให้ผู้ใช้ต้องมากดสั่ง map เองทุกครั้ง ซึ่งในบทความนี้เราจะมาแก้ปัญหาในจุดนี้กันด้วยการเขียนสคริปต์คำสั่ง โดยใช้โปรแกรมที่มีมาใน macOS อยู่แล้ว และไม่ต้องลงโปรแกรมเสริมใด ๆ เลย
การ map network drive ใน Windows 11
ขั้นตอนที่ 1
ตรวจสอบก่อนว่า IP address ของ NAS ในวงก่อนว่าใช้เลข IP อะไร วิธีที่ค่อนข้างง่ายก็คือเช็คจากระบบของ NAS เอง เช่นถ้าใช้ของ Synology ก็ตรวจสอบได้จาก Control Panel ใน DSM > หัวข้อ Network > แท็บ Network Interface ซึ่งจากในภาพข้างบนก็จะได้ว่า IP ของ NAS ที่ผมใช้อยู่คือ 192.168.50.4
ขั้นตอนที่ 2
ตรวจสอบชื่อโฟลเดอร์ที่ต้องการใช้เป็น network drive เพราะหากมีการแบ่ง Shared Folder ใน NAS อยู่ ผู้ใช้จะสามารถเลือก map network drive แค่บางโฟลเดอร์ได้ โดยให้ดูชื่อโฟลเดอร์ที่ต้องการ map เพื่อนำไปใช้ในขั้นตอนถัด ๆ ไป เช่น ถ้าผมต้องการ map โฟลเดอร์ NASSync ก็อาจจะจดชื่อออกมาไว้ก่อนก็ได้
ขั้นตอนที่ 3
เปิดหน้า This PC หรือที่หลายท่านคุ้นเคยกันในชื่อ My Computer โดยอาจจะใช้การกดปุ่ม Windows ค้างไว้แล้วตามด้วยปุ่ม E ก็ได้ จากนั้นคลิกที่ Add a network location
ขั้นตอนที่ 4
จะมีหน้าต่าง Add Network Location ขึ้นมา โดยในหน้าแรกให้คลิกที่ปุ่ม Next ส่วนในหน้าที่สอง ก็ให้คลิกที่รูปโฟลเดอร์ก่อน จากนั้นจึงคลิกที่ปุ่ม Next อีกที
ขั้นตอนที่ 5
จะมีช่องให้กรอก IP เพื่อระบุที่อยู่ของ shared folder ใน NAS ให้ถูกต้อง ก็ใส่เลข IP และชื่อโฟลเดอร์ของ NAS ที่ต้องการ map network drive ลงไป โดยจะใช้การกรอกในรูปแบบนี้
\\เลขไอพี\ชื่อโฟลเดอร์ เช่น \\192.168.50.4\NASSync
จากนั้นคลิก Next ซึ่งถ้าระบุที่อยู่ของ NAS และโฟลเดอร์ได้ถูกต้อง ก็จะมีหน้าจอขึ้นมาให้ตั้งชื่อ network drive ซึ่งจะเป็นชื่อที่ปรากฏในหน้า This PC ของ Windows เท่านั้น ไม่ได้เป็นการเปลี่ยนชื่อของ NAS
เมื่อเสร็จแล้ว network drive ก็จะขึ้นมาให้ใช้งานได้ทันที เสมือนว่าเป็นไดรฟ์หนึ่งในเครื่องเลย
การ map network drive ใน macOS
สำหรับฝั่ง macOS ก็จะมีขั้นตอนที่คล้ายกัน คือผู้ใช้งานต้องทราบเลขไอพีของ NAS และชื่อของ shared folder ใน NAS ก่อน จากนั้นจึงใช้เครื่องมือของ macOS ในการ map อีกที (ฝั่งของ mac จะใช้เป็นคำว่า mount มากกว่า) โดยรอบนี้จะข้ามเรื่องการดู IP กับชื่อโฟลเดอร์ไปนะครับ เพราะจะใช้วิธีเดียวกันกับในหัวข้อข้างต้นเลย แต่จะเปลี่ยนมา map โฟลเดอร์ชื่อ photo แทน
ขั้นตอนที่ 1
ขณะที่ใช้งาน Finder อยู่ (มีชื่อ Finder อยู่ตรงแถบเมนูบาร์ด้านบน) กดปุ่ม Command ค้างไว้แล้วตามด้วยปุ่ม K จะมีหน้าต่าง Connect to Server ปรากฏขึ้นมา
ขั้นตอนที่ 2
กรอกเลข IP และชื่อโฟลเดอร์ลงในช่องด้านบน โดยให้ระบุโปรโตคอลการแชร์ข้อมูลไว้ตรงด้านหน้าด้วย ซึ่งจะขึ้นอยู่กับการตั้งค่าที่ฝั่ง NAS ว่าใช้เป็นอะไรอยู่ เช่น SMB, AFP, NFS หรือ FTP สำหรับค่าเริ่มต้นโดยทั่วไปมักจะใช้ SMB เป็นหลัก เพราะสามารถใช้งานได้กับหลากหลายระบบปฏิบัติการ
ซึ่งถ้าใช้ SMB อยู่ การกรอกที่อยู่จะใช้เป็นแบบในภาพด้านบน คือ
smb://192.168.50.4/photo
เมื่อกรอกเสร็จเรียบร้อย ก็ให้กดปุ่ม Connect ตรงมุมขวาล่าง ถ้ามีการตั้ง username และ password ของ NAS ไว้ ก็จะมีหน้าต่างขึ้นมาให้กรอกด้วย โดยสามารถเลือกให้ระบบจดจำไว้ได้ ทำให้ไม่ต้องกรอกซ้ำอีกในครั้งต่อไป
ถ้าไม่มีปัญหา network drive ที่ระบุไป ก็จะปรากฏขึ้นมาให้ใช้งานในรูปแบบ Remote Volume แล้ว
แต่ตามที่เกริ่นไปข้างต้นว่า macOS จะใช้การ map network drive แบบเป็นครั้ง ๆ ไป ทำให้ผู้ใช้ต้องมาทำขั้นตอนข้างต้นทุกครั้งหลังจากปิดและเปิดเครื่องใหม่ หรือกลับมาต่อเน็ตเวิร์ควงที่ใช้ map ซึ่งอันที่จริงมันก็ใช้เวลาไม่เยอะมากนัก แต่น่าจะดีกว่าถ้าระบบทำการ map ให้อัตโนมัติคล้ายกับใน Windows เพราะจะเพิ่มความสะดวกให้กับการทำงานมาก เพราะเชื่อว่าหลายท่านอาจจะเคยหงุดหงิดบ้างเวลารีบ ๆ แล้วมาเจอปัญหาว่าไม่สามารถเข้าถึงข้อมูลได้ เนื่องจากยังไม่ได้ map network drive
ซึ่งในบทความนี้เราจะมาแก้ pain point ดังกล่าวด้วยการเขียนสคริปต์คำสั่ง และตั้งค่าให้ระบบใช้สคริปต์นี้ในการ map network drive แบบอัตโนมัติให้ ซึ่งวิธีนี้อาจจะมีขั้นตอนที่ยุ่งยากซักนิดนึง แต่ข้อดีคือเราลำบากแค่ครั้งเดียวในการทำครั้งแรก จากนั้นก็แทบไม่ต้องทำอะไรอีกเลย รวมถึงยังไม่ต้องลงโปรแกรมเสริมอะไรอีกด้วย เพราะทุกขั้นตอนจะใช้เครื่องมือที่มีอยู่ใน macOS อยู่แล้ว
โดยวิธีนี้ ส่วนตัวผมจะมีให้เลือกใช้งานอยู่ 3 ระดับครับ
- เขียนสคริปต์ให้ระบบ map network drive ให้อัตโนมัติ เมื่อเปิดเครื่องขึ้นมา (ทำครั้งเดียว)
- เขียนสคริปต์ให้ระบบ map network drive ให้อัตโนมัติ เมื่อเปิดเครื่องขึ้นมา และพบว่าต่อเน็ตวงที่ระบุไว้เท่านั้น (ทำครั้งเดียว)
- เขียนสคริปต์ให้ระบบ map network drive ให้อัตโนมัติ เมื่อเปิดเครื่องขึ้นมา + ต่อเน็ตวงที่ระบุไว้เท่านั้น และทำงานเบื้องหลังตลอดเวลา
อธิบายแบบง่าย ๆ ข้อ 1 คือสคริปต์จะทำงานแค่ตอนเปิดเครื่องแบบไม่สนใจเลยว่าเราต่อเน็ตอะไรอยู่ แล้วก็จบไป ไม่ทำงานต่อ ซึ่งจะมีข้อจำกัดคือถ้าเราไปเปิดเครื่องที่อื่น โดยต่อเน็ตวงอื่นที่ไม่มี NAS และ shared folder ตามที่เขียนสคริปต์ไว้ ระบบก็จะแจ้งข้อผิดพลาดขึ้นมาด้วย (ในกรณีที่ไม่ได้เขียนให้ ignore error)
ส่วนข้อ 2 ก็จะมีการตรวจสอบเงื่อนไขขึ้นมานิดนึง ว่าถ้าหากเปิดเครื่องมา แล้วต่อเน็ตวงที่กำหนดไว้ ระบบถึงจะทำการ mount network drive ให้ แล้วจบการทำงานไป แต่ถ้าไม่ได้ต่อเน็ตวงที่ระบุ สคริปต์ก็จะปิดการทำงานไปเช่นกัน ทำให้ไม่เกิดข้อความ error ขึ้นมา
ซึ่ง 2 ข้อข้างต้นนี้สามารถใช้งานทั่วไปได้ดีทีเดียว แต่จะมีข้อจำกัดในกรณีที่ผู้ใช้ไม่ได้ปิดเครื่องเลย อาศัยการพับจอไปทำงานในสถานที่อื่น หรือสลับเน็ตไปมา เสร็จแล้วก็กลับมาต่อเน็ตวงที่ระบุ จะพบว่า network drive มันหายไป เนื่องจากสคริปต์ที่เขียนไว้มันทำงานจบไปแล้ว และไม่มีการทำงานเบื้องหลังเพื่อคอยเช็คสถานะการเชื่อมต่ออยู่นั่นเอง
สำหรับข้อ 3 จะเป็นการอุดช่องโหว่ตรงจุดนี้ โดยหลักการทำงานจะเหมือนกัน แต่จะมีการสั่งระบบให้รันสคริปต์นี้แบบเบื้องหลังตลอดเวลาด้วย ทำให้แม้เราจะหิ้วคอมไปทำงานที่อื่น พอกลับมา ระบบก็จะ map drive กลับมาให้ใช้ได้ทันทีทุกครั้ง
ในการเขียนสคริปต์นี้ จะใช้เป็น AppleScript ของ Apple เอง ซึ่งใช้สำหรับเขียนคำสั่งควบคุมการงานของแอปต่าง ๆ ในเครื่อง ส่วนโปรแกรมที่ใช้ก็คือ Script Editor ที่สามารถเรียกใช้ได้โดยการพิมพ์ค้นหาใน Spotlight ว่า script editor ได้โดยตรงเลย ซึ่งเมื่อเปิดขึ้นมาก็ให้กดสร้างไฟล์ใหม่ จะได้เป็นหน้าจอสำหรับเขียนสคริปต์แล้ว ทีนี้เรามาดูรายละเอียดของสคริปต์ และวิธีการใช้งานของแต่ละข้อกันเลย
1. Map อัตโนมัติ ไม่สนใจวงเน็ต (ทำครั้งเดียว)
ขั้นตอนที่ 1
เขียนสคริปต์ลงในช่องใหญ่ด้านบนของแอป Script Editor โดยใช้สคริปต์ด้านล่างนี้
tell application “Finder”
mount volume “smb://192.168.50.4/NASSync” as user name “XXXXXX” with password “YYYYYY”
mount volume “smb://192.168.50.4/DL” as user name “XXXXXX” with password “YYYYYY”
end tell
อธิบายโค้ดได้ดังนี้
tell application “Finder”
ใช้คำสั่ง tell เรียกแอปพลิเคชัน Finder ขึ้นมาทำงาน เพราะการ mount network drive จะใช้การทำงานของ Finder
mount volume “smb://192.168.50.4/NASSync”
ใช้ระบุว่าให้ mount โฟลเดอร์ของ NAS ตาม IP และ shared folder ที่ระบุ โดยในโค้ดข้างต้นจะมีคำสั่งนี้ด้วยกันสองชุด นั่นคือสามารถสั่ง map network drive ได้พร้อมกันมากกว่า 1 ไดรฟ์ด้วย นั่นคือไดรฟ์ที่ชื่อว่า NASSync กับ DL
as user name “XXXXXX” with password “YYYYYY”
ในกรณีที่มีการตั้ง username และ password ของ NAS ไว้ เราสามารถระบุข้อมูลทั้งสองอย่างไว้ในสคริปต์เลย ทำให้ระบบจะไม่มีหน้าต่างขึ้นมาถามตอนที่สคริปต์ทำงานเลย โดย XXXXXX คือ username ส่วน YYYYYY คือรหัสผ่าน โดยให้พิมพ์ไว้ในครอบของเครื่องหมาย “” เช่นถ้ารหัสผ่านเป็น 123456 ก็ให้ใส่ในโค้ดว่าเป็น “123456”
end tell
ปิดคำสั่ง tell และเป็นการปิดการทำงานของสคริปต์ด้วย
ขั้นตอนที่ 2
บันทึกสคริปต์ด้วยการกด Save… หรือกดปุ่มลัด Command+S โดยก่อนจะคลิกปุ่ม Save ให้เปลี่ยน File Format ให้เป็น Application ตามภาพด้านขวาก่อน จากนั้นอาจจะเลือกตำแหน่งที่บันทึกไฟล์ไว้ในจุดที่จะไม่เผลอลบง่าย ๆ เช่น อาจจะเก็บไว้ในโฟลเดอร์ชื่อผู้ใช้งานเองที่ระบบสร้างให้ เป็นต้น ส่วนชื่อไฟล์สามารถตั้งได้ตามต้องการเลย เมื่อกดเซฟแล้ว จะได้ไฟล์แอปพลิเคชันมา สามารถดับเบิลคลิกไฟล์เพื่อสั่ง mount ได้ทันที ซึ่งถ้า username และรหัสผ่านถูกต้อง ก็จะไม่มีหน้าจอขึ้นมาถามเลย
ขั้นตอนที่ 3
สั่งให้ระบบเรียกใช้งานแอปที่สร้างจากสคริปต์นี้ทุกครั้งที่เปิดเครื่อง ทำได้โดยเปิด System Settings ของ macOS ขึ้นมา > General > Login Items แล้วดูที่หัวข้อ Open at Login ให้กดเครื่องหมาย + แล้วไปเลือกไฟล์แอปที่สร้างจากสคริปต์ จากนั้นก็คลิกที่ปุ่ม Open เมื่อเสร็จแล้วมันก็จะเข้ามาอยู่ในส่วนของแอปที่ระบบจะเปิดใช้งานทันทีหลังเปิดเครื่องขึ้นหลังจากล็อกอินเข้าใช้งานระบบ
2. Map อัตโนมัติ แบบเช็ควงเน็ตด้วย (ทำครั้งเดียว)
ขั้นตอนที่ 1
เขียนสคริปต์ลงในช่องใหญ่ด้านบนของแอป Script Editor โดยใช้สคริปต์ด้านล่างนี้
(แนะนำให้ copy โค้ดด้านล่างนี้ไปใส่ได้เลย แล้วค่อยไปแก้ชื่อ รหัสผ่าน เลขไอพี ชื่อโฟลเดอร์ต่าง ๆ ทีหลัง เพราะลำดับการเอียงของโค้ดมีผลกับการทำงานของสคริปต์ด้วย)
set SSID to do shell script “/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | awk ‘/ SSID: / {print $2}'”
set lanStatus to do shell script “ifconfig en7 | grep ‘status’ | cut -d ‘:’ -f 2 | tr -d ‘ ‘”
if SSID is “Home-AX-5G” or SSID is “Home-AX-24” or lanStatus is “active” then
tell application “Finder”
delay 5
mount volume “smb://192.168.50.4/NASSync” as user name “XXXXXX” with password “YYYYYY”
mount volume “smb://192.168.50.4/DL” as user name “XXXXXX” with password “YYYYYY”
end tell
end if
จะเห็นว่าส่วนที่สั่ง mount ของโค้ดยังเป็นเหมือนเดิม แต่มีการเช็คเงื่อนไขเพิ่ม โดยแนวทางการทำงานของโค้ดนี้คือ จะใช้ if ตรวจสอบก่อนว่าเน็ตที่ต่อนั้นเป็นวงที่ระบุหรือไม่ โดยตรวจสอบทั้ง WiFi และ LAN ซึ่งถ้าหากต่อแค่อันใดอันหนึ่งก็เพียงพอแล้ว และจะเข้าสู่ขั้นตอนถัดไปคือการ map network drive ตามปกติ ส่วนถ้าตรวจแล้วพบว่าไม่ได้ต่อเน็ตวงใดที่กำหนดไว้เลย ก็จะหลุดจากวง if ไปทันที และจบสคริปต์ไปเลย ไม่มีการทำงานใด ๆ ทีนี้มาดูโค้ดส่วนที่เพิ่มเข้ามากันครับ
set SSID to do shell script “/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | awk ‘/ SSID: / {print $2}'”
เป็นการสร้างตัวแปรที่มีชื่อว่า SSID ขึ้นมา โดยให้ใช้ในการเก็บข้อมูลที่ได้จากการใช้คำสั่งเรียกดูข้อมูลชื่อวง WiFi ที่เครื่องเชื่อมต่ออยู่ว่าเป็นชื่ออะไร เช่นถ้าชื่อ WiFi ชื่อว่า AAAAA ค่าของตัวแปรก็จะมีชื่อว่า AAAAA
set lanStatus to do shell script “ifconfig en7 | grep ‘status’ | cut -d ‘:’ -f 2 | tr -d ‘ ‘”
เป็นการสร้างตัวแปรที่มีชื่อว่า lanStatus ขึ้นมา การทำงานก็จะเหมือนกับหัวข้อบนเลย แต่เป็นการเก็บสถานะว่าเครื่องกำลังเชื่อมต่อเน็ตผ่านสายแลนอยู่หรือเปล่า โดยจะเก็บแค่ว่า active อยู่หรือไม่ แต่ตรงนี้จะมีสิ่งที่ต้องหาข้อมูลเพิ่มเติมก่อนนิดนึงครับ นั่นคือตรงคำว่า en7 สีน้ำเงิน เพราะมันจะเป็นลำดับของอินเตอร์เฟซที่เครื่องใช้งาน ซึ่งเราจะต้องรู้ก่อนว่าสายแลนที่เชื่อมต่อกับเครื่องอยู่นี้ ระบบจัดชื่อลำดับให้ว่าเป็น en อะไร
สามารถเข้าไปดูได้จากหน้า System Information ที่ใช้การค้นหาจากฟีเจอร์ Spotlight ก็ได้ หรือที่หลายท่านอาจคุ้นหน่อย ก็คือโปรแกรมที่ไว้ใช้ดู cycle แบตเตอรี่ใน MacBook เลยครับ แต่รอบนี้เราจะมาดูที่หัวข้อ Network แทน เมื่อเปิดหัวข้อ Network แล้ว ให้ดูที่ตารางด้านบนสุด จะเป็นรายชื่ออินเตอร์เฟซทั้งหมด ก็ให้ลงมาหาตรงประเภท Ethernet โดยดูเฉพาะอันที่มีหมายเลข IP ด้านหลังเท่านั้น แล้วดูชื่ออินเตอร์เฟซจากคอลัมน์ BSD Device Name อย่างในภาพด้านบน ก็จะเป็น en7 ก็ให้เอาคำว่า en7 ไปใส่ในโค้ดได้เลย
if SSID is “Home-AX-5G” or SSID is “Home-AX-24” or lanStatus is “active” then
…
end if
เป็นคำสั่งเริ่มการตรวจสอบเงื่อนไขด้วย if (ถ้า…ให้ทำ…) ซึ่งในโค้ดข้างบนนี้ ผมเขียนให้เช็คว่ากำลังต่อ WiFi ที่มีชื่อว่า Home-AX-5G หรือ Home-AX-24 หรือกำลังต่อสายแลนอยู่หรือเปล่า ถ้าใช่ ก็ให้ทำตามโค้ดบรรทัดถัดไปที่แทนด้วย … ได้เลย ส่วนถ้าไม่เข้าเงื่อนไขใดเลยทั้งสามอันนี้ ก็ให้ข้าม … ทั้งหมด เพื่อจบที่ end if และปิดสคริปต์ไปเลย
ซึ่งระบบก็จะเอาชื่อ WiFi ที่ตัวแปร SSID บันทึกไว้ มาเทียบกับคำว่า Home-AX-5G และ Home-AX-24 ตรง ๆ เลย ดังนั้นโค้ดนี้จะใช้ได้กับชื่อ WiFi ที่ระบุไว้เท่านั้น หากมีการเปลี่ยนชื่อ WiFi ไป ก็ต้องมาแก้โค้ดนี้ให้ตรงกันด้วย จึงจะสามารถใช้งานได้ตามปกติ ส่วนฝั่งของสายแลนจะเป็นการเช็คแค่ว่าต่อสายแลนอยู่หรือเปล่า ไม่ได้เช็คว่าต่อวงแลนที่ไหนอยู่ ซึ่งถ้าต้องการให้เช็คด้วย อาจจะต้องมีการเพิ่มเงื่อนไขเรื่องเลข IP ด้วย ว่าถ้า IP ที่เราได้รับแจกมานี้ตรงกับที่กำหนดไว้ ถึงค่อยทำตามคำสั่งใน … แต่ในกรณีนี้ อาจลำบากหน่อยถ้ามีการตั้งค่า router เป็นแบบ DHCP ที่เราอาจได้รับ IP แต่ละครั้งไม่ตรงกัน
ดังนั้นถ้าไม่แน่ใจเรื่องการเชื่อมต่อผ่านสายแลนจริง ๆ อาจจะตัดโค้ดเหลือแค่ส่วนการเช็ค SSID WiFi ก็พอครับ
delay 5
เป็นคำสั่งให้หน่วงเวลาไว้ก่อนที่จะไปทำคำสั่งบรรทัดถัดไป โดยตัวเลขคือเลขของวินาที อาจจะมีประโยชน์สำหรับท่านที่ไม่ต้องการให้ระบบ map network drive ให้ทันทีที่ต่อเน็ตก็ได้ หรือถ้าไม่จำเป็น ก็สามารถตัดโค้ดส่วนนี้ออกได้เช่นกัน
เมื่อจัดการกับโค้ดเสร็จแล้ว ก็ทำขั้นตอนเดียวกับข้อแรกเลย คือเซฟโค้ดเป็นแอปพลิเคชัน จากนั้นก็เอาไปใส่ใน Open at Login
3. Map อัตโนมัติ แบบเช็ควงเน็ตด้วย (ทำงานตลอดเวลา)
ในข้อนี้ หลักการกับโค้ดจะเหมือนในข้อสอง คือให้เช็คว่าต่อเน็ตวงที่กำหนดไว้หรือไม่ ถ้าต่อก็ให้ mount ไดรฟ์ทันที แต่ทีนี้เราจะปรับโค้ดเพิ่มอีกนิดหน่อย ให้มีการตรวจสอบก่อนว่ามีการ map network drive ไว้หรือยัง ถ้ามีอยู่แล้ว ก็ให้จบการทำงานไปเลยโดยไม่ต้องลงมาตรวจสอบอีกว่าต่อเน็ตวงไหนอยู่ เพื่อลดการทำงานลง
ขั้นตอนที่ 1
เขียนสคริปต์ลงในช่องใหญ่ด้านบนของแอป Script Editor โดยใช้สคริปต์ด้านล่างนี้
(แนะนำให้ copy โค้ดด้านล่างนี้ไปใส่ได้เลย แล้วค่อยไปแก้ชื่อ รหัสผ่าน เลขไอพี ชื่อโฟลเดอร์ต่าง ๆ ทีหลัง เพราะลำดับการเอียงของโค้ดมีผลกับการทำงานของสคริปต์ด้วย)
set mountedDiskName to “NASSync”
set SSID to do shell script “/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | awk ‘/ SSID: / {print $2}'”
set lanStatus to do shell script “ifconfig en7 | grep ‘status’ | cut -d ‘:’ -f 2 | tr -d ‘ ‘”
tell application “Finder”
if not (disk “NASSync” exists) then
if SSID is “Home-AX-5G” or SSID is “Home-AX-24” or lanStatus is “active” then
delay 5
mount volume “smb://192.168.50.4/NASSync” as user name “XXXXXX” with password “YYYYYY”
mount volume “smb://192.168.50.4/DL” as user name “XXXXXX” with password “YYYYYY”
end if
end if
end tell
ทีนี้เรามาดูรายละเอียดของโค้ดส่วนที่เพิ่มเข้ามากันหน่อย
if not (disk “NASSync” exists) then
… (มี if และ end if เช็คเน็ตอีกที)
end if (ที่สอง)
เป็นส่วนที่ใช้ตรวจสอบเงื่อนไขว่ามีไดรฟ์ (disk) ที่ชื่อว่า NASSync อยู่หรือเปล่า ถ้าไม่มี ให้ทำตามโค้ดในบรรทัดถัดลงมาต่อ แต่ถ้ามีอยู่แล้ว ก็ให้ข้ามไปปิดวง if ที่สอง ซึ่งพอปิดเสร็จก็จะจบที่ end tell และจบสคริปต์ไปเลย ส่วนวง if ข้างในก็จะเป็นการตรวจสอบเงื่อนไขเรื่องการเชื่อมต่อ WiFi หรือสายแลนเหมือนเดิมเลย
ขั้นตอนที่ 2
บันทึกไฟล์สคริปต์เป็นไฟล์ประเภท Script ซึ่งจะได้นามสกุลไฟล์เป็น .scpt แล้วไปวางไว้ในโฟลเดอร์ใดก็ได้ ที่จะไม่เผลอเข้าไปลบไฟล์
ขั้นตอนที่ 3
สร้างไฟล์ property list (.plist) สำหรับกำหนดค่าให้ macOS รันไฟล์สคริปต์ที่สร้างขึ้นมาในข้อสอง โดยใช้โปรแกรม TextEdit ที่มีอยู่แล้วในเครื่อง ส่วนโค้ดที่ต้องใช้ สามารถ copy ด้านล่างนี้ได้เลย แต่ให้เปลี่ยนข้อความในแท็ก <string> เล็กน้อย
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>Label</key>
<string>script3.job</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>/Users/zerosystem/script3.scpt</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
โดยจุดที่ไฮไลท์สีเหลืองไว้ เป็นส่วนที่สามารถเปลี่ยนได้ สำหรับจุดแรกคือชื่อ job สามารถเปลี่ยนเป็นชื่ออื่นได้ตามต้องการ แต่ทางที่ดีก็อาจจะใช้เป็นชื่อเดียวกับไฟล์สคริปต์ก็ได้ เผื่อเวลาต้องเรียกใช้ จะได้ไม่สับสน
ส่วนอีกจุดคือ path ที่ตั้งของไฟล์สคริปต์ .scpt ที่เราวางไว้ อันนี้สามารถหาได้ไม่ยากเลย เพราะเราสามารถโยนไฟล์ .scpt มาใส่ในหน้าต่างของโปรแกรม TextEdit ได้เลย ซึ่งโปรแกรมจะเปลี่ยนมาแสดง path ของไฟล์ให้โดยอัตโนมัติ
และจุดสุดท้ายที่น่าสนใจก็คือที่แท็ก <key> ด้านล่าง ที่ใส่ KeepAlive ไว้ด้านใน เพราะเป็นตัวที่กำหนดให้ระบบรันสคริปต์นี้ไว้เบื้องหลังตลอดเวลาที่เครื่องทำงานอยู่ และที่จริงจะมีให้ปรับได้อีกหลายแบบ เช่น ถ้าใช้ RunAtLoad ก็คือสั่งให้ทำงานแค่ตอนเปิดเครื่องแล้วก็จบไป และ StartInterval คือสั่งให้ทำงานทุก ๆ กี่วินาทีก็ได้ตามที่ต้องการ ซึ่งสามารถเข้าไปดูเพิ่มเติมได้ที่เว็บนี้ครับ เผื่อต้องการปรับแต่งรูปแบบการทำงานตามต้องการ
เมื่อเสร็จแล้วก็ให้เซฟไฟล์ตามปกติ ซึ่งถ้าตามปกติแล้ว ระบบจะใส่นามสกุลไฟล์ว่าเป็น .txt ที่เป็นไฟล์ข้อความปกติ ให้เราแก้ชื่อไฟล์ใหม่ โดยลบ .txt ที่ต่อท้ายออก แล้วใส่ .plist แทน แต่ถ้าหากตอนนี้ macOS ยังไม่แสดงนามสกุลไฟล์เลย ให้สลับไปใช้งานแอป Finder ก่อน จากนั้นคลิกที่คำว่า Finder ตรงเมนูบาร์ด้านบน จากนั้นคลิกที่ Settings… เมื่อมีหน้าต่างเล็ก ๆ ขึ้นมา ให้คลิกที่ Advanced > ติ๊กถูกที่หน้าหัวข้อ Show all filename extensions เพื่อให้แสดงนามสกุลไฟล์ของทุกไฟล์ขึ้นมา ซึ่งถ้าทำถูกต้อง จะได้ไฟล์ .plist แบบในภาพด้านบนเลย โดยที่ไอคอนก็จะมีคำว่า PLIST อยู่ด้วย
ขั้นตอนที่ 4
ย้ายไฟล์ .plist ในข้อ 3 ไปไว้ในโฟลเดอร์ /Users/ชื่อผู้ใช้งาน/Library/LaunchAgents/ สำหรับวิธีเข้าไปในโฟลเดอร์นี้ แบบที่ง่ายสุดคือไปที่แอป Finder จากนั้นกดปุ่ม Command กับ Shift พร้อมกันค้างไว้ แล้วกดปุ่ม G (Cmd+Shift+G) ที่จะเป็นการเรียกกล่องสำหรับใส่ path ของโฟลเดอร์ขึ้นมา ให้ใส่เข้าไปว่า ~/Library/LaunchAgents/ แล้วกด enter
ระบบจะเปิดโฟลเดอร์ LaunchAgents ขึ้นมา ให้เราลากไฟล์ .plist ที่สร้างในขั้นตอนที่ 3 มาไว้ในโฟลเดอร์นี้ได้เลย เพียงเท่านี้ก็เป็นอันเสร็จสิ้น สามารถรีสตาร์ทเครื่องซักรอบได้เลย
ส่วนถ้าถามว่าการเปิดให้สคริปต์ map network drive ทำงานเบื้องหลังตลอดเวลาแบบนี้ จะกินแรงเครื่องมากมั้ย ใช้แบต กินไฟเยอะหรือเปล่า เท่าที่ผมทดสอบกับเครื่องตัวเองมา พบว่าไม่แตกต่างกันเลย เนื่องจากสคริปต์นี้เป็นการทำงานแบบพื้นฐานมาก ๆ แทบไม่ต้องใช้พลังของเครื่องเท่าไหร่เลย จึงสามารถเปิดใช้งานตลอดเวลาได้ตามต้องการ
ทีนี้ถ้าต้องการปิดการทำงานของระบบนี้ นอกจากการเข้าไปลบไฟล์ .plist แล้ว ยังสามารถสั่งเปิด/ปิดได้ตามต้องการด้วย เพียงแค่เข้าไปที่ System Settings > General > Login Items แล้วดูที่ Allow in the Background จะมีหัวข้อ osascript อยู่ พร้อมสวิตช์เปิด/ปิดทางขวามือ ถ้าต้องการหยุดการทำงาน ก็เพียงแค่เลื่อนสวิตช์ปิดเท่านั้นเอง