วิธีรัน LINE Chrome Extension บน Linux Mint พร้อมบังคับขนาดหน้าต่าง 800×600 ด้วย wmctrl


บทนำ

ผู้ใช้งาน 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://..."

แต่พบว่าขนาดหน้าต่างไม่เปลี่ยน

สาเหตุคือ

  1. Chrome เปิดหน้าต่างก่อน
  2. LINE Chrome Extension Restore ขนาดหน้าต่างเดิม
  3. คำสั่ง --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

,