Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

Binary Space Partitioning Window Manager (bspwm) เป็น window manager แบบมินิมอลลิสต์ที่ทรงพลังสำหรับ Linux มีการตั้งค่าที่ยืดหยุ่นสูง และนำเสนอแนวทางนวัตกรรมในการจัดการหน้าต่าง bspwm เขียนด้วย C และตั้งค่าได้ด้วยภาษาใดก็ได้ bspwm คือจิตวิญญาณของการปรับแต่งโดยผู้ใช้ใน window manager ทำให้ดึงดูด power users และนักทดลองที่สนใจสร้าง workflow เฉพาะตัว

Binary Space Partitioning อธิบาย

Binary Space Partitioning เป็นแนวคิดที่หน้าต่างบนเดสก์ท็อปสามารถแสดงเป็น leaves ใน full binary tree Full binary tree คือโครงสร้างจัดเรียงข้อมูลด้วย nodes แบบลำดับชั้น ข้อมูลภายใน tree จะจัดเรียงเป็นคู่ โดย root node จะมี 2 nodes เสมอ

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

bspwm ทำงานกับ nodes ในทางปฏิบัติ เมื่อสร้างหน้าต่างบนเดสก์ท็อปว่าง bspwm จะสร้าง single node สำหรับหน้าต่างนั้น คิดว่า node นั้นเป็น leaf node แต่เมื่อสร้างหน้าต่างเพิ่มในเดสก์ท็อปเดิม leaf node นั้นจะกลายเป็น root node และ bspwm สร้าง leaf node ใหม่ 2 ตัว attached กับมัน จากนั้นวางหน้าต่างปัจจุบันและหน้าต่างใหม่ใน leaf nodes นั้น

หน้าต่างใหม่ที่สร้างหลังจากนี้ จะเชื่อมโยงกับ leaf nodes ทั้งสอง ทำให้กลายเป็น root nodes ของตัวเอง

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

การจัดเรียงหน้าต่างแบบนี้สร้างลำดับชั้นที่ชัดเจนภายในเดสก์ท็อป ชัดเจนว่า leaf nodes ไหนถูกสร้างก่อน และไหนมาจากกลุ่ม root nodes เฉพาะ เรื่องนี้มีประโยชน์เมื่อสร้าง custom behavior rules สำหรับหน้าต่างเฉพาะและ window layouts

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

Keybindings และ Status Bars

สำคัญคือ bspwm จัดการแค่หน้าต่าง ฟังก์ชันอื่นที่ไม่เกี่ยวกับการจัดการหน้าต่าง ไม่ได้รวมอยู่ในแพ็กเกจ bspwm รวมถึงการ bind keys กับฟังก์ชัน และการแสดง status bar

เพื่อใช้ keybindings ใน bspwm นักพัฒนาสร้างโปรแกรมแยกชื่อ Simple X Hotkey Daemon (sxhkd) ที่จัดการ keybindings เท่านั้น สำหรับ status bar ผู้ใช้ติดตั้งแอปพลิเคชันบุคคลที่สามอย่าง polybar และ lemonbar

ติดตั้ง bspwm และ sxhkd

ติดตั้ง bspwm และ sxhkd ง่าย ทั้งสองโปรแกรมมีใน repository ของ Linux ส่วนใหญ่ ตัวอย่างเช่น Debian/Ubuntu ใช้ apt:

sudo apt install bspwm sxhkd

Arch Linux ใช้ pacman:

sudo pacman -Syu bspwm sxhkd

Fedora ใช้ dnf:

sudo dnf install bspwm sxhkd

Void Linux ใช้ xbps:

sudo xbps-install bspwm sxhkd

ในกรณีของผม ติดตั้งบนระบบ Void Linux ใช้ XBPS

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

bspc: Universal Controller สำหรับ bspwm

เพื่อใช้ bspwm ต้องโต้ตอบกับโปรแกรมเดียว: bspc utility อันทรงพลังควบคุมและตั้งค่าพฤติกรรม bspwm คำสั่งทั้งหมดที่ใช้จัดการหน้าต่างและตั้งค่าพฤติกรรม คือคำสั่ง bspc

เตรียมไฟล์ config สำหรับ bspwm

เริ่มตั้งค่า bspwm ต้องสร้างไฟล์ config ก่อน นี่คือที่ bspwm จะหา คำสั่ง bspc ที่จะรันตอนเริ่มต้น โดยค่าเริ่มต้น bspwm หาไฟล์ "/home/$USER/.config/bspwm/bspwmrc" สร้างไฟล์ด้วย:

mkdir -p /home/$USER/.config/bspwm && touch /home/$USER/.config/bspwm/bspwmrc

คำสั่งนี้สร้างโฟลเดอร์ bspwm ใน "/home/$USER/.config/" และสร้างไฟล์ bspwmrc ในโฟลเดอร์นั้น

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

ไฟล์ bspwmrc เขียนได้ด้วยภาษาไหนก็ได้ ถ้า executable ต้องตั้งคุณสมบัติไฟล์ให้เป็น executable ก่อน:

sudo chmod 774 /home/$USER/.config/bspwm/bspwmrc

ทำให้เราและคนใน usergroup เดียวกันรันไฟล์นี้ได้

จากนั้นเปิดไฟล์ bspwmrc ในกรณีของผม ใช้ vim แก้ไข:

vim /home/$USER/.config/bspwm/bspwmrc

จะเปิดไฟล์ว่าง พร้อมเริ่มเขียน config

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

ตั้งค่า bspwm

basic config สำหรับ bspwm ประมาณนี้:

#!/bin/bash xsetroot -cursor_name left_ptr sxhkd & bspc config border_width 2 bspc config window_gap 0 bspc config split_ratio 0.62 bspc config focus_follows_pointer true bspc config pointer_modifier mod1 bspc config automatic_scheme spiral bspc rule -a Chromium desktop='^2' bspc rule -a Gimp desktop='^8' state=floating follow=on

ตาม shebang บรรทัดแรก config นี้เขียนด้วย Bash คำสั่งแรกๆ คือโปรแกรมที่ต้องการรันก่อนตั้งค่า bspwm

คำสั่งแรก xsetroot เปลี่ยน X cursor เริ่มต้นเป็น left pointer คำสั่งที่สอง เริ่ม hotkey daemon ในพื้นหลัง

bspc config และ bspc rule

คำสั่งต่อไปใน config เฉพาะ bspc bspc config จัดการ config ทั่วไปของ window manager รวมทั้งการตั้งค่าแสตเทิกและฟังก์ชัน

วิธีติดตั้งและตั้งค่า bspwm ใน Linux
  • border_width กำหนดความหนาของขอบหน้าต่างเป็นพิกเซล
  • window_gap จัดการช่องว่างรอบหน้าต่างเป็นพิกเซล
  • split_ratio กำหนดอัตราส่วนระหว่าง leaf nodes 2 ตัวเมื่อ split
  • focus_follows_pointer ตั้งค่าว่าเมาส์ควบคุม focus หน้าต่างได้ไหม
  • pointer_modifier กำหนดปุ่มคีย์บอร์ดสำหรับ resize หน้าต่างด้วยเมาส์
  • automatic_scheme กำหนด layout ของหน้าต่างเมื่อ split ในโหมด automatic

bspc rule จัดการพฤติกรรมโปรแกรมเมื่อเปิดใน bspwm

  • rule แรก บังคับให้ Chromium รันใน desktop ที่ 2
  • rule ที่สอง บังคับให้ Gimp รันใน desktop ที่ 8 บังคับให้รันแบบ floating แทน tiled เริ่มต้น และบังคับ focus หน้าต่าง Gimp ตอนโหลด

ตอนนี้มี basic config สำหรับ bspwm แล้ว สำคัญคือ options สำหรับ bspc config และ bpsc rule มีมากมาย อยากรู้เพิ่มเติมดูเอกสาร GitHub สำหรับรายการตั้งค่าทั้งหมด

sxhkd: Keybinding Utility สำหรับ bspwm

sxhkd เป็นโปรแกรมเรียบง่าย ฟัง keyboard input events และรันคำสั่งตามปุ่มที่กด จัดการ multi-key inputs ผ่าน chording และมี config file ที่เข้าใจง่าย

เตรียมไฟล์ config สำหรับ sxhkd

เตรียม config file sxhkd คล้าย bspwmrc สร้างโฟลเดอร์และไฟล์ config sxhkd:

mkdir -p /home/$USER/.config/sxhkd/ && touch /home/$USER/.config/sxhkd/sxhkdrc
วิธีติดตั้งและตั้งค่า bspwm ใน Linux

ตั้งค่า sxhkdrc ให้ executable:

sudo chmod 774 /home/$USER/.config/sxhkd/sxhkdrc

เสร็จแล้ว มีไฟล์ config sxhkd สำหรับใส่ keybindings ทั้งหมด

ตั้งค่า sxhkd

sxhkd รู้จัก keybindings ในรูปแบบเฉพาะ ขอ modifier key ก่อน คือ Alt, Super, Hyper หรือ Control จากนั้นให้ normal key เสริม modifier key รวมเป็น keybinding ด้วยเครื่องหมาย "+" ระหว่างกัน

รูปแบบทั่วไปของ keybinding sxhkd:

modifier key + normal key (+ {_, additional, keys})

เสร็จแล้ว กด Enter และ Tab สร้างบรรทัดย่อยใต้ keybinding ระบุคำสั่งที่จะรันเมื่อกด keybinding

ตัวอย่าง config sxhkd:

# make sxhkd reload its configuration files alt + Escape pkill -USR1 -x sxhkd # quit or restart bspwm alt + shift + {q,r} bspc {quit,wm -r} # create a new terminal window or swap the current one to the biggest one in the screen alt + {_,shift + }Return {st, bspc node -s biggest.local} # close or kill a window alt + {_,shift + }c bspc node -{k,c} # change the window state alt + {t,ctrl + t,l,f} bspc node -t {tiled,pseudo_tiled,floating,fullscreen} # expand a window by moving one of its side outward super + alt + {h,j,k,l} bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0} # focus or send a window to the given desktop alt + {_,shift + }{1-9,0} bspc {desktop -f,node -d} '^{1-9,10}'

อธิบายไวยากรณ์ Keybinding

ตามที่กล่าว ไวยากรณ์ keybinding sxhkd เรียบง่าย เพิ่มเติม sxhkd จัดกลุ่ม keybindings และรัน branching commands ผ่าน key chording

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

ตัวอย่าง คำสั่งหลายอย่างใช้ curly braces ใส่หลายฟังก์ชันบน keybinds คล้ายกัน ดูคำสั่งนี้ใน config:

alt + shift + {q,r} bspc {quit, wm -r}

คำสั่งนี้จัดการปิดและ restart bspwm curly braces ใน keybinding ตรงกับ curly braces ใน command line ดังนั้น กด Alt + Shift + Q รัน bspc quit กด Alt + Shift + R รัน bspc wm -r

ข้าม keypad เพิ่มได้ ดูตัวอย่าง:

alt + {_,shift + }Return {st, bspc node -s biggest.local}

คำสั่งนี้จัดการ spawn terminal และ swap windows ในเดสก์ท็อป ทำคำสั่งแรกด้วย Alt + Enter คำสั่งที่สองด้วย Alt + Shift + Enter

เพราะ underscore character เป็น pass-through สำหรับ keybindings ให้มี default keybinding สำหรับคำสั่งหนึ่ง และ "modified" keybinding สำหรับคำสั่งอื่น

สุดท้าย sxhkd ไม่จำกัด single branching ดูตัวอย่าง:

alt + {_,shift + }{1-9,0} bspc {desktop -f,node -d} '^{1-9,10}'

คำสั่งนี้จัดการสลับเดสก์ท็อป และจัดการเคลื่อนย้ายหน้าต่างภายในเดสก์ท็อป คำสั่งแรกรันตอนกด Alt + 1-0 คำสั่งที่สองกับ modifier Shift

ใช้ curly braces 2 ชุด สำหรับ pass-through key และ หมายเลขเดสก์ท็อป 2 ตัวเลือกนี้ตรงกับ curly braces 2 ชุดในคำสั่งด้านล่าง

เสร็จสิ้นการติดตั้ง

ตอนนี้เข้าใจพื้นฐาน config bspwm และ sxhkd แล้ว สิ่งสุดท้ายคือ enable bspwm เป็น window manager ทำได้ผ่าน Xorg หรือ display manager

รัน bspwm ด้วย xinitrc

วิธีง่ายที่สุด initialize bspwm คือ append ในไฟล์ .xinitrc ถ้าใช้ Linux distribution minimal นี่คือวิธีที่คุณใช้ load window manager

แค่ append บรรทัดนี้ท้าย .xinitrc:

exec bspwm
วิธีติดตั้งและตั้งค่า bspwm ใน Linux

รัน bspwm ด้วย Display Manager

แต่ถ้าใช้ full-featured desktop เช่น Linux Mint หรือ Ubuntu อาจต้องเลือก bspwm ในหน้าจอ login

ตัวอย่าง ใน Ubuntu ของผม ต้องคลิกไอคอนเกียร์หน้าจอ login เลือก bspwm จาก context menu โหลด

วิธีติดตั้งและตั้งค่า bspwm ใน Linux

ยินดีด้วย! ตอนนี้คุณมีการติดตั้ง bspwm ที่ทำงานแล้ว ปรับแต่ง desktop เพิ่มเติมได้โดยแก้ไข config files และติดตั้ง third-party docks นี่คือ desktop ที่ปรับแต่งแล้วให้แรงบันดาลใจ

คำถามที่พบบ่อย

1. ทำไมหน้าจอดูดเวลา login ครั้งแรก?

น่าจะเป็นเพราะยังไม่ตั้ง wallpaper กรณีรัน minimal installation มักเกิดขึ้น เปลี่ยน theme พื้นหลังด้วย image viewer เช่น feh

2. ทำไม keybindings ไม่ทำงาน?

น่าจะเป็น 2 สาเหตุ:

  • Keybindings โหลดไม่ได้เพราะ sxhkd ไม่ได้รัน
  • Syntax error ใน sxhkdrc ผิดพลาดทั่วไปคือ indent ต้อง insert Tab-spaces ในบรรทัดย่อยเพื่อ initialize commands ให้ถูกต้อง

3. Login แล้วกลับสู่ system prompt ทันที?

อาจเกิดจากหลายอย่าง แต่น่าเป็นปัญหา .xinitrc ต้องแน่ใจว่า bspwm เป็นโปรแกรมสุดท้ายที่ Xorg โหลด และไม่รันเป็น background process