บทนำ
ผู้ใช้งาน LINE Chrome Extension บน Linux Mint อาจพบปัญหาว่าเมื่อเปิดโปรแกรมด้วยคำสั่ง
/usr/bin/google-chrome-stable --app="chrome-extension://ophjlpahpchlmihnnnihgmmeilfjmjjc/index.html#/"
Chrome จะเปิดหน้าต่างด้วยขนาดล่าสุดที่เคยใช้งาน หรือขนาดที่ตัว Extension กำหนดไว้ ทำให้พารามิเตอร์อย่าง
--window-size=800,600
ไม่สามารถบังคับขนาดหน้าต่างได้
บทความนี้จะแสดงวิธีใช้ wmctrl เพื่อบังคับให้ LINE เปิดด้วยขนาด 800×600 พิกเซล ทุกครั้ง
ติดตั้ง wmctrl
บน Linux Mint สามารถติดตั้งได้ด้วยคำสั่ง
sudo apt update
sudo apt install wmctrl
ตรวจสอบว่าโปรแกรมพร้อมใช้งาน
wmctrl -m
ตัวอย่างผลลัพธ์
Name: Mutter (Muffin)
Class: N/A
PID: N/A
Window manager's "showing the desktop" mode: OFF
ตรวจสอบชื่อหน้าต่าง
เปิด LINE Chrome Extension ก่อน
จากนั้นรัน
wmctrl -lx
ตัวอย่างผลลัพธ์
0x03600004 0 ophjlpahpchlmihnnnihgmmeilfjmjjc__index.html.Google-chrome mill-Aspire-4741 LINE
ในตัวอย่างจะเห็นว่า
- Window ID คือ
0x03600004 - Window Class คือ
ophjlpahpchlmihnnnihgmmeilfjmjjc__index.html.Google-chrome
- ชื่อหน้าต่างคือ
LINE
ทำไม –window-size ถึงใช้ไม่ได้
หลายคนลองใช้คำสั่ง
google-chrome-stable \
--window-size=800,600 \
--app="chrome-extension://..."
แต่พบว่าขนาดหน้าต่างไม่เปลี่ยน
สาเหตุคือ
- Chrome เปิดหน้าต่างก่อน
- LINE Chrome Extension Restore ขนาดหน้าต่างเดิม
- คำสั่ง
--window-sizeถูกแทนที่
ดังนั้นจึงต้องใช้ wmctrl ปรับขนาดหลังจากหน้าต่างถูกสร้างเสร็จ
สร้างสคริปต์เปิด LINE พร้อมบังคับขนาดหน้าต่าง
สร้างไฟล์
line.sh
ใส่โค้ดดังนี้
#!/bin/bash
/usr/bin/env LANG=th_TH.UTF-8 LANGUAGE=th_TH \
/usr/bin/google-chrome-stable \
--lang=th \
--app="chrome-extension://ophjlpahpchlmihnnnihgmmeilfjmjjc/index.html#/" &
# รอจนเจอ Window ID
while true; do
WIN=$(wmctrl -lx | awk '/ophjlpahpchlmihnnnihgmmeilfjmjjc__index.html.Google-chrome/ {print $1; exit}')
[ -n "$WIN" ] && break
sleep 0.1
done
# บังคับขนาดหลายครั้ง
for i in $(seq 1 30); do
wmctrl -i -r "$WIN" -b remove,maximized_vert,maximized_horz
wmctrl -i -r "$WIN" -e 0,100,100,800,600
sleep 0.2
done
ให้สิทธิ์รัน
chmod +x line.sh
จากนั้นเปิด LINE
./line.sh
อธิบายการทำงานของสคริปต์
เปิด LINE
/usr/bin/google-chrome-stable \
--app="chrome-extension://..."
เป็นการเปิด Chrome Extension ในโหมด App
รอจนสร้างหน้าต่าง
while true; do
วนตรวจสอบว่าหน้าต่างถูกสร้างแล้วหรือยัง
หา Window ID
WIN=$(wmctrl -lx | awk '/Google-chrome/ {print $1; exit}')
เก็บ Window ID ของ LINE
ตัวอย่าง
0x03600004
ยกเลิกการ Maximize
wmctrl -i -r "$WIN" -b remove,maximized_vert,maximized_horz
หากหน้าต่างถูกเปิดแบบเต็มจอ จะถูกยกเลิกก่อน
ปรับตำแหน่งและขนาด
wmctrl -i -r "$WIN" -e 0,100,100,800,600
รูปแบบคำสั่งคือ
wmctrl -e gravity,x,y,width,height
โดยในตัวอย่าง
- gravity = 0
- x = 100
- y = 100
- width = 800
- height = 600
ทำไมต้องวน 30 รอบ
Chrome จะ Restore ขนาดหน้าต่างเดิมหลังจากเปิดโปรแกรม
หากสั่ง wmctrl เพียงครั้งเดียว Chrome อาจเปลี่ยนขนาดกลับทันที
การวนหลายครั้งช่วยให้ wmctrl ปรับขนาดซ้ำจนกว่า Chrome จะหยุดแก้ไขหน้าต่าง
ผลลัพธ์
เมื่อเรียกใช้
./line.sh
LINE Chrome Extension จะ
- เปิดอัตโนมัติ
- ย้ายไปตำแหน่ง
(100,100) - ปรับขนาดเป็น
800 × 600 - ใช้งานได้บน Linux Mint Cinnamon โดยใช้
wmctrl
สรุป
แม้ Chrome จะมีพารามิเตอร์ --window-size แต่สำหรับ LINE Chrome Extension พารามิเตอร์นี้มักไม่สามารถกำหนดขนาดหน้าต่างได้ เนื่องจากตัว Extension จะกู้คืนขนาดเดิมหลังจากเปิดใช้งาน
การใช้ wmctrl ร่วมกับการรอให้หน้าต่างถูกสร้าง และอ้างอิงผ่าน Window ID เป็นวิธีที่ช่วยให้สามารถบังคับตำแหน่งและขนาดหน้าต่างได้อย่างมีประสิทธิภาพบน Linux Mint โดยเฉพาะเมื่อใช้งาน LINE Chrome Extension ในโหมด App
