ื”ืคืขืœ ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ ืขื‘ื•ืจ ืื•ืจื—ื™ Arch Linux ื‘-Hyper-V

ื”ืคืขืœ ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ ืขื‘ื•ืจ ืื•ืจื—ื™ Arch Linux ื‘-Hyper-V

ื”ืฉื™ืžื•ืฉ ื‘ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืฉืœ ืœื™ื ื•ืงืก ื‘-Hyper-V ืžื—ื•ืฅ ืœืงื•ืคืกื” ื”ื•ื ืงืฆืช ืคื—ื•ืช ื ื•ื— ืžืืฉืจ ื‘ืžื›ื•ื ื•ืช Windows ืื•ืจื—ื•ืช. ื”ืกื™ื‘ื” ืœื›ืš ื”ื™ื ืฉื”-Hyper-V ืœื ื ื•ืขื“ ื‘ืžืงื•ืจ ืœืฉื™ืžื•ืฉ ืฉื•ืœื—ื ื™; ืืชื” ืœื ื™ื›ื•ืœ ืคืฉื•ื˜ ืœื”ืžืฉื™ืš ื•ืœื”ืชืงื™ืŸ ืืช ื—ื‘ื™ืœืช ื”ืชื•ืกืคื•ืช ืœืื•ืจื—ื™ื ื•ืœืงื‘ืœ ื”ืืฆืช ื’ืจืคื™ืงื” ื ื•ื—ื” ืœืขื‘ื•ื“ื”, ืœื•ื—, ืกืคืจื™ื•ืช ืžืฉื•ืชืคื•ืช ื•ืฉืืจ ื”ื ืื•ืช ื—ื™ื™ื, ื›ืคื™ ืฉื–ื” ืงื•ืจื” ื‘-VirtualBox.

Hyper-V ืขืฆืžื• ืžืกืคืง ืฉื™ืจื•ืชื™ ืื™ื ื˜ื’ืจืฆื™ื” ืžืจื•ื‘ื™ื - ื›ืš ืฉื”ืื•ืจื—ื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืฉื™ืจื•ืช ื”ืขืชืงืช ื”ืฆืœ (VSS) ืฉืœ ื”ืžืืจื—, ื”ืื•ืจื—ื™ื ื™ื›ื•ืœื™ื ืœืฉืœื•ื— ืื•ืช ื›ื™ื‘ื•ื™, ื”ืื•ืจื—ื™ื ื™ื›ื•ืœื™ื ืœืกื ื›ืจืŸ ืืช ื–ืžืŸ ื”ืžืขืจื›ืช ืขื ืžืืจื— ื”ื•ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื”, ื ื™ืชืŸ ืœื”ื—ืœื™ืฃ ืงื‘ืฆื™ื ืขื ื”ืžื—ืฉื‘ ื”ื•ื•ื™ืจื˜ื•ืืœื™ ืžื”ืžืืจื— (Copy-VMFile ื‘- PowerShell). ืขื‘ื•ืจ ื›ืžื” ืžืขืจื›ื•ืช ื”ืคืขืœื” ืื•ืจื—ื•ืช, ื›ื•ืœืœ, ื›ืžื•ื‘ืŸ, Windows, ื‘ื™ื™ืฉื•ื Virtual Machine Connection (vmconnect.exe) ื–ืžื™ืŸ ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ, ื”ืคื•ืขืœ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ RDP ื•ืžืืคืฉืจ ืœื”ืขื‘ื™ืจ ื”ืชืงื ื™ ื“ื™ืกืง ื•ืžื“ืคืกื•ืช ืœืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช, ื›ืžื• ื’ื ืœื”ืฉืชืžืฉ ื‘ืœื•ื— ื”ืžืฉื•ืชืฃ.

ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ ืคื•ืขืœ ืžื—ื•ืฅ ืœืงื•ืคืกื” ื‘-Windows ื‘-Hyper-V ืžื™ื“ ืœืื—ืจ ื”ื”ืชืงื ื”. ืขื ืื•ืจื—ื™ื ื‘ืœื™ื ื•ืงืก, ืขืœื™ืš ืœื”ืชืงื™ืŸ ืฉืจืช RDP ื”ืชื•ืžืš ื‘-vsock (ืžืจื—ื‘ ื›ืชื•ื‘ื•ืช ืจืฉืช ื•ื™ืจื˜ื•ืืœื™ ืžื™ื•ื—ื“ ื‘ืœื™ื ื•ืงืก ืฉื ื•ืขื“ ืœืชืงืฉืจ ืขื ื”-Hypervisor). ืื ืขื‘ื•ืจ ืื•ื‘ื•ื ื˜ื•, ืœื™ื™ืฉื•ื VMCreate ืฉืžื’ื™ืข ืขื Hyper-V ื‘ืžื”ื“ื•ืจื•ืช ืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื” ืฉืœ Windows ื™ืฉ ืชื‘ื ื™ืช ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืžื•ื›ื ื” ืžื™ื•ื—ื“ืช ืฉื‘ื” ืฉืจืช RDP ืคื•ืขืœ ืขื vsock XRDP ื›ื‘ืจ ืžื•ืชืงืŸ ืžืจืืฉ, ื•ืื– ื‘ื”ืคืฆื•ืช ืื—ืจื•ืช ื–ื” ืคื—ื•ืช ื•ืคื—ื•ืช ื‘ืจื•ืจ - ืœืžืฉืœ, ื”ืžื—ื‘ืจ ื”ืคื•ืกื˜ ื”ื–ื” ื”ืชื‘ืจืจ ืฉื”ื•ื ืžืืคืฉืจ ESM ื‘ืคื“ื•ืจื”. ื›ืืŸ ืื ื• ื’ื ืžืคืขื™ืœื™ื ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ ืขื‘ื•ืจ ื”ืžื—ืฉื‘ ื”ื•ื™ืจื˜ื•ืืœื™ Arch Linux.

ื”ืชืงื ืช ืฉื™ืจื•ืชื™ ืื™ื ื˜ื’ืจืฆื™ื”

ื”ื›ืœ ืคื—ื•ืช ืื• ื™ื•ืชืจ ืคืฉื•ื˜ ื›ืืŸ, ืื ื—ื ื• ืจืง ืฆืจื™ื›ื™ื ืœื”ืชืงื™ืŸ ืืช ื”ื—ื‘ื™ืœื” hyperv ืžืžืื’ืจ ื”ืงื”ื™ืœื”:

% sudo pacman -S hyperv

ืืคืฉืจ ืฉื™ืจื•ืชื™ VSS, ื”ื—ืœืคื” ืžื˜ื ื ืชื•ื ื™ื ื•ืงื‘ืฆื™ื:

% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; done

ื”ืชืงื ืช XRDP

ืžืื’ืจ linux-vm-tools ื‘-GitHub ืžืกืคืง ืกืงืจื™ืคื˜ื™ื ืฉืžืžื’ื ื™ื ืืช ืชื”ืœื™ืš ื”ื”ืชืงื ื” ื•ื”ื”ื’ื“ืจื” ืฉืœ XRDP ืขื‘ื•ืจ Arch Linux ื•ืื•ื‘ื•ื ื˜ื•. ื”ืชืงืŸ ืืช Git, ืื ื”ื•ื ืขื“ื™ื™ืŸ ืœื ืžื•ืชืงืŸ, ื™ื—ื“ ืขื ื”ืžื”ื“ืจ ื•ืชื•ื›ื ื•ืช ืื—ืจื•ืช ืœื‘ื ื™ื™ื” ื™ื“ื ื™ืช, ื•ืœืื—ืจ ืžื›ืŸ ืฉื›ืคืœ ืืช ื”ืžืื’ืจ:

% sudo pacman -S git base-devel
% git clone https://github.com/microsoft/linux-vm-tools.git
% cd linux-vm-tools/arch

ื‘ื–ืžืŸ ื›ืชื™ื‘ืช ืฉื•ืจื•ืช ืืœื”, ื”ืžื”ื“ื•ืจื” ื”ืื—ืจื•ื ื” ืฉืœ XRDP, ื”ืžื•ืชืงื ืช ืขืœ ื™ื“ื™ ื”ืกืงืจื™ืคื˜ makepkg.shื”ืžื•ืฆืข ื‘ืžืื’ืจ ื”ื•ื 0.9.11, ืฉื‘ื• ื”ื ื™ืชื•ื— ืžืงื•ืœืงืœ vsock://-ื›ืชื•ื‘ื•ืช, ืื– ืืชื” ืฆืจื™ืš ืœื”ืชืงื™ืŸ XRDP ืž-Git ื•ืืช ืžื ื”ืœ ื”ื”ืชืงืŸ ืฉืœ Xorg ืขื‘ื•ืจื• ืž-AUR ื‘ืื•ืคืŸ ื™ื“ื ื™. ื’ื ื”ืชื™ืงื•ืŸ ืขื‘ื•ืจ XRDP ื”ืžื•ืฆืข ื‘-AUR ืžื™ื•ืฉืŸ ืžืขื˜, ื›ืš ืฉืชืฆื˜ืจืš ืœืขืจื•ืš ืืช ื”-PKGBUILD ื•ืืช ื”ืชื™ืงื•ืŸ ื‘ืื•ืคืŸ ื™ื“ื ื™.

ืื ื• ืžืฉื›ืคืœื™ื ืืช ื”ืžืื’ืจื™ื ืขื PKGBUILDs ืžื”-AUR (ื‘ื“ืจืš ื›ืœืœ ื”ืœื™ืš ื–ื”, ื™ื—ื“ ืขื ื”-assembly, ื”ื•ื ืื•ื˜ื•ืžื˜ื™ ืขืœ ื™ื“ื™ ืชื•ื›ื ื™ื•ืช ื›ืžื• yay, ืื‘ืœ ื”ืžื—ื‘ืจ ืขืฉื” ืืช ื›ืœ ื”ื”ืœื™ืš ื”ื–ื” ืขืœ ืžืขืจื›ืช ื ืงื™ื™ื”):

% git clone https://aur.archlinux.org/xrdp-devel-git.git
% git clone https://aur.archlinux.org/xorgxrdp-devel-git.git

ื‘ื•ื ื ืชืงื™ืŸ ืชื—ื™ืœื” ืืช XRDP ืขืฆืžื•. ื‘ื•ืื• ื ืคืชื— ืืช ื”ืงื•ื‘ืฅ PKGBUILD ื›ืœ ืขื•ืจืš ื˜ืงืกื˜.

ื‘ื•ืื• ื ืขืจื•ืš ืืช ืคืจืžื˜ืจื™ ื”ื‘ื ื™ื™ื”. ื”-PKGBUILD ืœื‘ื ื™ื™ืช XRDP ืž-Git ืื™ื ื• ื›ื•ืœืœ ืชืžื™ื›ืช vsock ื‘-build, ืื– ื‘ื•ืื• ื ืคืขื™ืœ ืื•ืชื• ื‘ืขืฆืžื ื•:

 build() {
   cd $pkgname
   ./configure --prefix=/usr 
               --sysconfdir=/etc 
               --localstatedir=/var 
               --sbindir=/usr/bin 
               --with-systemdsystemdunitdir=/usr/lib/systemd/system 
               --enable-jpeg 
               --enable-tjpeg 
               --enable-fuse 
               --enable-opus 
               --enable-rfxcodec 
               --enable-mp3lame 
-              --enable-pixman
+              --enable-pixman 
+              --enable-vsock
   make V=0
 }

ื‘ืชื™ืงื•ืŸ arch-config.diff, ืฉืขื•ืจื›ืช ื™ื—ื™ื“ื•ืช ื•ืชืกืจื™ื˜ื™ ื”ืคืขืœื” XRDP ืžืชื—ืช ืœื ืชื™ื‘ื™ื ืœืงื‘ืฆื™ื ื”ืžืฉืžืฉื™ื ื‘- Arch Linux, ืžื›ื™ืœื”, ื‘ื™ืŸ ื”ื™ืชืจ, ืชื™ืงื•ืŸ ืœืกืงืจื™ืคื˜ instfiles/xrdp.sh, ืืฉืจ ื‘ื–ืžืŸ ื›ืชื™ื‘ืช ืฉื•ืจื•ืช ืืœื” ื”ื•ืกืจ ืžื”ืคืฆืช XRDP, ื›ืš ืฉื”ืชื™ืงื•ืŸ ื™ืฆื˜ืจืš ืœืขื‘ื•ืจ ืขืจื™ื›ื” ื™ื“ื ื™ืช:

  [Install]
  WantedBy=multi-user.target
-diff -up src/xrdp-devel-git/instfiles/xrdp.sh.orig src/xrdp-devel-git/instfiles/xrdp.sh
---- src/xrdp-devel-git/instfiles/xrdp.sh.orig  2017-08-30 00:27:28.000000000 -0600
-+++ src/xrdp-devel-git/instfiles/xrdp.sh   2017-08-30 00:28:00.000000000 -0600
-@@ -17,7 +17,7 @@
- # Description: starts xrdp
- ### END INIT INFO
- 
--SBINDIR=/usr/local/sbin
-+SBINDIR=/usr/bin
- LOG=/dev/null
- CFGDIR=/etc/xrdp
- 
 diff -up src/xrdp-devel-git/sesman/startwm.sh.orig src/xrdp-devel-git/sesman/startwm.sh
 --- src/xrdp-devel-git/sesman/startwm.sh.orig  2017-08-30 00:27:30.000000000 -0600

ื‘ื ื” ื•ื”ืชืงืŸ ืืช ื”ื—ื‘ื™ืœื” ืขื ื”ืคืงื•ื“ื” % makepkg --skipchecksums -si (ืžึทืคึฐืชึตื—ึท --skipchecksums ื™ืฉ ืฆื•ืจืš ืœื”ืฉื‘ื™ืช ืืช ืื™ืžื•ืช ืกื›ื•ื ื”ื‘ื“ื™ืงื” ืฉืœ ืงื‘ืฆื™ ืžืงื•ืจ, ืžื›ื™ื•ื•ืŸ ืฉืขืจื›ื ื• ืื•ืชื ื‘ืื•ืคืŸ ื™ื“ื ื™).

ื‘ื•ื ื ืœืš ืœืžื“ืจื™ืš xorgxrdp-devel-git, ืฉืœืื—ืจื™ื• ืื ื—ื ื• ืคืฉื•ื˜ ื‘ื•ื ื™ื ืืช ื”ื—ื‘ื™ืœื” ืขื ื”ืคืงื•ื“ื” % makepkg -si.

ื‘ื•ื ื ืœืš ืœืžื“ืจื™ืš linux-vm-tools/arch ื•ืœื”ืจื™ืฅ ืืช ื”ืกืงืจื™ืคื˜ install-config.sh, ืฉืงื•ื‘ืข ืืช ื”ื’ื“ืจื•ืช XRDP, PolicyKit ื•-PAM:

% sudo ./install-config.sh

ืกืงืจื™ืคื˜ ืžืชืงื™ืŸ ื”ื’ื“ืจื” ืžื“ื•ืจ ืงื•ื“ื use_vsock, ืฉืžืชืขืœืžื™ื ืžืžื ื• ืžืื– ื’ืจืกื” 0.9.11, ืื– ื‘ื•ืื• ื ืขืจื•ืš ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” /etc/xrdp/xrdp.ini ื‘ืื•ืคืŸ ื™ื“ื ื™:

 ;   port=vsock://<cid>:<port>
-port=3389
+port=vsock://-1:3389

 ; 'port' above should be connected to with vsock instead of tcp
 ; use this only with number alone in port above
 ; prefer use vsock://<cid>:<port> above
-use_vsock=true
+;use_vsock=true

 ; regulate if the listening socket use socket option tcp_nodelay

ื”ื•ืกืฃ ืœืงื•ื‘ืฅ ~/.xinitrc ื”ืคืขืœืช ืกื‘ื™ื‘ืช ืžื ื”ืœ ื”ื—ืœื•ื ื•ืช/ืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื” ื”ืžื•ืขื“ืคืช ืขืœื™ืš, ืฉืชืชื‘ืฆืข ื›ืืฉืจ ืฉืจืช X ื™ื•ืคืขืœ:

% echo "exec i3" > ~/.xinitrc

ื‘ื•ืื• ื ื›ื‘ื” ืืช ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช. ืืคืฉืจ ืืช ืชืขื‘ื•ืจืช vsock ืขื‘ื•ืจ ื”-VM ืขืœ ื™ื“ื™ ื”ืคืขืœืช ื”ืคืงื•ื“ื” ื”ื‘ืื” ื‘-PowerShell ื›ืžื ื”ืœ ืžืขืจื›ืช:

PS Admin > Set-VM -VMName ะะะ—ะ’ะะะ˜ะ•_ะœะะจะ˜ะะซ -EnhancedSessionTransportType HvSocket

ื‘ื•ืื• ื ืคืขื™ืœ ืฉื•ื‘ ืืช ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช.

ะŸะพะดะบะปัŽั‡ะตะฝะธะต

ื‘ืจื’ืข ืฉืฉื™ืจื•ืช XRDP ื™ืชื—ื™ืœ ืœืื—ืจ ื”ืคืขืœืช ื”ืžืขืจื›ืช, ืืคืœื™ืงืฆื™ื™ืช vmconnect ืชืงื‘ืข ื–ืืช ื•ืคืจื™ื˜ ื”ืชืคืจื™ื˜ ื™ื”ืคื•ืš ืœื–ืžื™ืŸ. ืœืฆืคื™ื” -> ื”ืคืขืœื” ืžืฉื•ืคืจืช. ื›ืืฉืจ ืชื‘ื—ืจ ื‘ืคืจื™ื˜ ื–ื”, ื ืชื‘ืงืฉ ืœื”ื’ื“ื™ืจ ืืช ืจื–ื•ืœื•ืฆื™ื™ืช ื”ืžืกืš, ื•ื‘ื›ืจื˜ื™ืกื™ื™ื” ืžืฉืื‘ื™ื ืžืงื•ืžื™ื™ื ื‘ืชื™ื‘ืช ื”ื“ื•-ืฉื™ื— ืฉื ืคืชื—ืช, ืชื•ื›ืœ ืœื‘ื—ื•ืจ ืืช ื”ืžื›ืฉื™ืจื™ื ืฉื”ื•ืขื‘ืจื• ื‘ืชื•ืš ื”ืคืขืœืช RDP.

ื”ืคืขืœ ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ ืขื‘ื•ืจ ืื•ืจื—ื™ Arch Linux ื‘-Hyper-V
ื”ืคืขืœ ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ ืขื‘ื•ืจ ืื•ืจื—ื™ Arch Linux ื‘-Hyper-V

ื‘ื•ืื• ื ืชื—ื‘ืจ. ื ืจืื” ืืช ื—ืœื•ืŸ ื”ื”ืชื—ื‘ืจื•ืช ืฉืœ XRDP:

ื”ืคืขืœ ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ ืขื‘ื•ืจ ืื•ืจื—ื™ Arch Linux ื‘-Hyper-V

ื”ื–ืŸ ืืช ืฉื ื”ืžืฉืชืžืฉ ื•ื”ืกื™ืกืžื” ืฉืœืš.

ืœื”ืฉืชืžืฉ

ื”ืจื•ื•ื— ืžื”ืžื ื™ืคื•ืœืฆื™ื•ืช ื”ืœืœื• ืžื•ืจื’ืฉ: ืกืฉืŸ RDP ืขื•ื‘ื“ ื”ืจื‘ื” ื™ื•ืชืจ ืจืกืคื•ื ืกื™ื‘ื™ ืžืืฉืจ ื‘ืขื‘ื•ื“ื” ืขื ืชืฆื•ื’ื” ื•ื™ืจื˜ื•ืืœื™ืช ืœืœื Enhanced Session. ื”ื“ื™ืกืงื™ื ืฉื”ื•ืขื‘ืจื• ื‘ืชื•ืš ื”-VM ื‘ืืžืฆืขื•ืช RDP ื–ืžื™ื ื™ื ื‘ืกืคืจื™ื™ื” ${HOME}/shared-drives:

ื”ืคืขืœ ืžืฆื‘ ื”ืคืขืœื” ืžืฉื•ืคืจ ืขื‘ื•ืจ ืื•ืจื—ื™ Arch Linux ื‘-Hyper-V

ื”ืœื•ื— ืขื•ื‘ื“ ื‘ืกื“ืจ. ืืชื” ืœื ื™ื›ื•ืœ ืœื–ืจื•ืง ืžื“ืคืกื•ืช ืคื ื™ืžื”, ื–ื” ืœื ืจืง ืœื ื ืชืžืš, ืืœื ื’ื ืฉื•ื‘ืจ ื”ืขื‘ืจืช ื“ื™ืกืง. ื”ืกืื•ื ื“ ื’ื ืœื ืขื•ื‘ื“, ืื‘ืœ ื”ืžื—ื‘ืจ ืœื ื”ื™ื” ืฆืจื™ืš ืืช ื–ื”. ื›ื“ื™ ืœืœื›ื•ื“ ืงื™ืฆื•ืจื™ ืžืงืฉื™ื ื›ืžื• Alt + Tab, ืขืœื™ืš ืœื”ืจื—ื™ื‘ ืืช vmconnect ืœืžืกืš ืžืœื.

ืื ืžืกื™ื‘ื” ื›ืœืฉื”ื™ ื™ืฉ ืจืฆื•ืŸ ืœื”ืฉืชืžืฉ ื‘ืœืงื•ื— RDP ื”ืžื•ื‘ื ื” ื‘-Windows ื‘ืžืงื•ื ื‘ื™ื™ืฉื•ื vmconnect ืื•, ืœืžืฉืœ, ืœื”ืชื—ื‘ืจ ืœืžื—ืฉื‘ ื–ื” ืžืžื—ืฉื‘ ืื—ืจ, ืื– ืชืฆื˜ืจืš ืœืฉื ื•ืช ืืช ื”ืงื•ื‘ืฅ /etc/xrdp/xrdp.ini port ืขืœ tcp://:3389. ืื ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ืžื—ื•ื‘ืจืช ืœืžืชื’ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื•ืžืงื‘ืœืช ื”ื’ื“ืจื•ืช ืจืฉืช ื‘ืืžืฆืขื•ืช DHCP, ืชื•ื›ืœ ืœื”ืชื—ื‘ืจ ืืœื™ื• ืžื”ืžืืจื— ื‘ื›ืชื•ื‘ืช ะฝะฐะทะฒะฐะฝะธะต_ะผะฐัˆะธะฝั‹.mshome.net. ืืชื” ื™ื›ื•ืœ ืœื”ื™ื›ื ืก ืœ-TTY ืจืง ืžืืคืœื™ืงืฆื™ื™ืช vmconnect ืขืœ ื™ื“ื™ ื›ื™ื‘ื•ื™ ืžืฆื‘ ืžืฉื•ืคืจ.

ืžืงื•ืจื•ืช ืžืฉื•ืžืฉื™ื:

  1. Hyper-V Arch Wiki
  2. ื“ื™ื•ื•ื—ื™ ื‘ืื’ื™ื ื‘-GitHub: 1, 2

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”