gcin-2.7.4 套件修正

  1. DYW Linux 輸入法預設只安裝 gcin 套件,進入圖形界面時 imsettings-start 重複執行而出現警告訊息。
    IMOpenIM 'gcin' failed. Maybe another XIM server is running
    
  2. 修改套件在登入圖形界面前加上 pkill gcin,先刪除執行中的 gcin。
        grep '^pkill gcin' /etc/gdm/PreSession/Default
        [ $? -ne 0 ] && echo 'pkill gcin' >> /etc/gdm/PreSession/Default
    
  3. 但以上刪除 gcin 程序的動作,在???螢幕下運作時使用 gdm 切換使用者及退出螢幕即死當,升級 gdm 套件版本為 2.30.4-21.el6.x86_64 時輸入密碼後無動作。為解決此一問題,再次修改 gcin 套件並與原始套件比對。
  4. 建立抽取原始 SRPM 套件內容的暫存目錄 sources,並切換至該目錄。
    [dywang@dywH ~]$ mkdir sources
    [dywang@dywH rpmbuild]$ cd sources/
    
  5. 不安裝套件的情況下,抽取原始 SRPM 套件內容。
    [dywang@dywH sources]$ rpm2cpio ../gcin-2.7.4-1.3.src.rpm | cpio -idvm
    gcin-2.7.4.tar.xz
    gcin.conf
    gcin.spec
    5924 blocks
    
  6. 比對修改前後的 gcin.spec。
    [dywang@dywH sources]$ diff -uN gcin.spec ../SPECS/gcin.spec 
    --- gcin.spec	2012-09-30 06:58:24.000000000 +0800
    +++ ../SPECS/gcin.spec	2015-08-06 12:14:52.621296600 +0800
    
  7. 版本加上 .dyw。
    @@ -1,6 +1,6 @@
     Name:           gcin
     Version:        2.7.4
    -Release:        1.3
    +Release:        1.3.dyw
     Summary:        Input method for Traditional Chinese
     
     Group:          System Environment/Libraries
    
  8. 由於 DYW 圖形界面只使用 gnome,因此只要安裝 gcin-gtk2 就同時執行新增的修改腳本。
    @@ -87,9 +87,32 @@
     %{_sbindir}/alternatives --install %{_sysconfdir}/X11/xinit/xinputrc xinputrc %{_sysconfdir}/X11/xinit/xinput.d/gcin.conf 40
     
     %post gtk2
    -if [ $1 -eq 1 ] ; then
    +if true ; then
    
  9. 由於 DYW 不是使用 redhat-linux-gnu 套件,因此修改成 unknown-linux-gnu 預設使用 gcin。
         # For upgrades, the cache will be regenerated by the new package's %%postun
    -    gtk-query-immodules-2.0-%{__isa_bits} > /etc/gtk-2.0/%{_arch}-redhat-linux-gnu/gtk.immodules || :
    +	mkdir /etc/gtk-2.0/%{_arch}-unknown-linux-gnu 2>/dev/null
    +	file="/etc/gtk-2.0/%{_arch}-unknown-linux-gnu/gtk.immodules"
    +    gtk-query-immodules-2.0-%{__isa_bits} > $file || :
    +	if ! grep -q "im-gcin.so" $file; then
    +		echo "\"/usr/lib64/gtk-2.0/immodules/im-gcin.so\"" >> $file
    +		echo "\"gcin\" \"gcin Input Method\" \"gcin\" \"/usr/share/locale\" \"*\"" >> $file
    +	fi
    
    +	(
    +	gd="/etc/X11/xinit/xinput.d"
    +	cd $gd
    +	gf="/etc/X11/xinit/xinput.d/gcin.conf"
    +	ln -sf $gd/gcin.conf /etc/alternatives/xinputrc
    +	[ ! -e none.conf.orig  -a ! -L none.conf ] && mv none.conf none.conf.orig
    +	ln -sf gcin.conf none.conf
    
  10. 刪除之前安裝 gcin 產生的 pkill gcin 動作。
    +	sed -i '/pkill gcin/d' /etc/gdm/PreSession/Default
    
  11. 將登入圖形界面自動執行的輸入法啟動程式 imsettings-start 刪除,以避免重複執行 gcin,而出現警告訊息。
    +	mv -f /etc/xdg/autostart/imsettings-start.desktop /etc/xdg/autostart/imsettings-start.error 2>/dev/null
    
  12. 設定輸入語系環境為 zh_TW.UTF-8。
    +	sed -i 's/^\(XIM_ARGS=\"\)/\1C_CTYPE=zh_TW.UTF-8\ /' $gf
    +	)
    
  13. gtk 輸入法註冊直接更新 cache,而不送到 stdout。
    +	gtk-query-immodules-2.0-%{__isa_bits} --update-cache
     fi
     
     %if 0%{?fedora_version}
    
  14. 由於 DYW 不是使用 redhat-linux-gnu 套件,因此 gtk 輸入法註冊結果改送到 unknown-linux-gnu。
    @@ -105,7 +128,7 @@
     update-desktop-database %{_datadir}/applications >/dev/null 2>&1 || :
     
     %postun gtk2
    -gtk-query-immodules-2.0-%{__isa_bits} > /etc/gtk-2.0/%{_arch}-redhat-linux-gnu/gtk.immodules || :
    +gtk-query-immodules-2.0-%{__isa_bits} > /etc/gtk-2.0/%{_arch}-unknown-linux-gnu/gtk.immodules || :
     
     %if 0%{?fedora_version}
     %postun gtk3