忍者ブログ
  • 2024.04«
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • » 2024.06
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/05/09 08:26 】 |
TSURUGIを入れてみた
令和SECCONに参加するのでTSURUGI Linuxを入れてみました。

fluxboxに切り替えて「fbmenugen」を使ったら「Other」に「TSURUGI」メニューが全て入ってカテゴリが分からなくなってしまいました。
fluxboxを入れた直後
仕方がないのでpythonでmateからfluxboxのmenuに変換するプログラムを作成、すっきりしましたとさ。
menuを修正後
■変換用python
import sys
from xml.dom import minidom
from os import path
from collections import OrderedDict

APP_Directory = None
DIR_Directory = None
def main():
    global APP_Directory
    global DIR_Directory

    if len(sys.argv)!=2:
        print("Using: {} mate.conf".format(sys.argv[0]))
        return
    fileName = sys.argv[1]
    APP_Directory = path.abspath(path.dirname(fileName)+"/../applications")
    DIR_Directory = path.abspath(path.dirname(fileName)+"/../desktop-directories")
    print(fileName)

    with open(fileName, "r", True, "UTF-8") as r:
        x = "\n".join(r.readlines())
    myDom = minidom.parseString(x)
    
    recurseDict(myDom, 0, [])

def recurseDict(dic, layer, stack):
    #dic = minidom.parseString("")
    layer+=1
    if sum(1 for x in dic.childNodes if not isinstance(x, minidom.Text)):
        if dic.nodeName != "Layout":
            for d in dic.childNodes:
                if not isinstance(d, minidom.Text):
                    recurseDict(d, layer, stack)

    else:
        if dic.nodeName == "Directory":
            lidx = 0
            for lidx in range(len(stack), 0, -1):
                if layer > stack[lidx-1][0]:
                    break
            for _ in range(lidx, len(stack)):
                stack.pop()
                print("{}[end]".format(" "*(len(stack)*2)))
            
            v = readFile(DIR_Directory+"/"+dic.childNodes[0].nodeValue)
            print("{}[submenu] ({}) <{}>".format(" "*(len(stack)*2), v["Name"], v["Icon"]))
            stack.append((layer, v))

        if dic.nodeName == "Filename":
            v = readFile(APP_Directory+"/"+dic.childNodes[0].nodeValue)
            print("{}[exec] ({}) {{{}}} <{}>".format(" "*(len(stack)*2), v["Name"], v["Exec"], v["Icon"]))

    if layer==1:
        for _ in range(len(stack)):
            stack.pop()
            print("{}[end]".format(" "*(len(stack)*2)))

def readFile(fileName):
    with open(fileName, "r", True, "UTF-8") as r:
        rec=dict()
        while True:            
            line = r.readline()
            if line=="":
                break
            line = line[:-1]

            pos = line.find("=")
            if pos >=0:
                key = line[0:pos]

                if ["Icon", "Name", "Exec"].count(key):
                    rec[key] = line[pos+1:]

        return rec


if __name__ == "__main__":
    main()
■fbmenugenにinclude機能を追加
diff --git a/fbmenugen b/fbmenugen
index 84e268b..fa5e784 100755
--- a/fbmenugen
+++ b/fbmenugen
@@ -401,6 +401,14 @@ ITEM_WITH_ICON
 ITEM
 }

+sub prepare_include {
+    my $path= shift() =~ s/\)/\\)/gr;
+
+    return <<"EOF"
+  [include] ($path)
+EOF
+}
+
 sub begin_category {
     $with_icons
       ? <<"MENU_WITH_ICON"
@@ -479,6 +487,9 @@ foreach my $schema (@$SCHEMA) {
     elsif (exists $schema->{item}) {
         $generated_menu .= prepare_item(@{$schema->{item}});
     }
+    elsif (exists $schema->{include}) {
+        $generated_menu .= prepare_include(@{$schema->{include}});
+    }
     elsif (exists $schema->{sep}) {
         $generated_menu .= "[separator]\n";
     }
diff --git a/schema.pl b/schema.pl
index 18a824a..50ae0dd 100644
--- a/schema.pl
+++ b/schema.pl
@@ -5,6 +5,7 @@
 =for comment

     item:      add an item inside the menu               {item => ["command", "label", "icon"]},
+    include:   add include another file               {include => ["path"]},
     cat:       add a category inside the menu             {cat => ["name", "label", "icon"]},
     sep:       horizontal line separator                  {sep => undef}, {sep => "label"},
     raw:       any valid Fluxbox menu entry               {raw => q(...)},

拍手[0回]

PR
【2019/04/25 22:29 】 | linux | 有り難いご意見(9)
UbuntuでCUPSを用いて自動命名印刷
CUPSのいつもの設定

■/etc/cups/cupsd.conf
...
# Restrict access to the admin pages...
<Location /admin>
  Require user @SYSTEM
  Order allow,deny
</Location>
...

■cups-pdfのインストール
sudo apt install cups-pdf

■/etc/cups/cups-pdf.conf
...
### Key: Out (config)
##  CUPS-PDF output directory 
##  special qualifiers: 
##     ${HOME} will be expanded to the user's home directory
##     ${USER} will be expanded to the user name
##  in case it is an NFS export make sure it is exported without
##  root_squash!
##  on Ubuntu, the cupsd AppArmor profile needs to be updated
##  to match the output path as per instructions in LP:147551
### Default: /var/spool/cups-pdf/${USER}

Out${HOME}
...
 ### Key: GSCall (config)
 ## command line for calling GhostScript (!!! DO NOT USE NEWLINES !!!)
 ## MacOSX: for using pstopdf set this to %s %s -o %s %s
 ### Default: %s -q -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile="%s" -dAutoRotatePages=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite -f %s 
GSCall /usr/local/bin/cups-pdf-common %s %s "%s" %s 
 ...

■/usr/local/bin/cups-pdf-common
#!/bin/bash
export MY_GS=$1
export MY_VER=$2
HOME=$(dirname "$3")
USER=$(basename ${HOME})
export MY_IN=$4
export MY_OUT=$(basename "$3")

execpath=~/bin/cups-pdf
if [ -f ${execpath} ]
then
	${execpath}
fi

■~/bin/cups-pdf
#!/bin/bash

#Ps2PDF
${MY_GS} -q -dCompatibilityLevel=${MY_VER} -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile="${HOME}/PDF/$(date +%Y%m%d_%H%M%S.%N)_${MY_OUT}" -dAutoRotatePages=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite -f ${MY_IN}

拍手[0回]

【2018/12/17 00:01 】 | Ubuntu | 有り難いご意見(0)
GRUB2をカスタマイズ
GRUB2でメニューの表示の仕方
※GRUB_HIDDEN_TIMEOUT_QUIETは関係ありません。

/etc/default/grub
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=y
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=3

拍手[0回]

【2018/12/10 21:27 】 | grub | 有り難いご意見(0)
レスキューディスクでのリカバリ
リカバリの仕方
# mount -t /dev/mapper/VG-LV root
# mount --bind /dev root/dev
# mount -t tmpfs tmpfs root/run
# mount -t proc proc root/proc
# mount -t sysfs sysfs root/sys
# chroot root
■参考文献 http://www.linuxfromscratch.org/lfs/view/stable-systemd/chapter06/kernfs.html

拍手[0回]

【2018/12/10 21:23 】 | linux | 有り難いご意見(0)
新しいノーとPCを買いました
以下、スペック
 -----------------------------------------------------------
 【商品ID】611820 
 【商品名】STYLE-15FH038-i5-UHEX [OS LESS] 
 -----------------------------------------------------------
 【保証】1年間無償保証
 【下取りサービス】下取りサービスなし
 【天板ロゴ】天板ロゴ(iiyama)有り
 【OS】OSなし(OSに関するサポートは無くなります。)
 【アンチウィルス・セキュリティ対策ソフト】ノートンセキュリティ 30日間体験版 プリインストール※OSなしを選択の場合はインストールされておりません。
 【プロセッサー】インテル(R) Core i5-8250U プロセッサー (1.6-3.4GHz/4コア/8スレッド/6MBキャッシュ/TDP15W)
 【メインメモリ】DDR4-2400 4GB/SO-DIMM×2(デュアルチャンネル/計8GB)
 【M.2 SSD[OSインストール]】250GB SSD / NVMe M.2[PCI Exp.3.0×4]
 【HDD/SSD[追加1]】2TB HDD / 2.5インチ Serial-ATA
 【光学式ドライブ】8倍速DVDスーパーマルチドライブ
 【チップセット】CPU統合チップセット
 【グラフィックアクセラレーター】インテル(R) UHD Graphics 620(CPU統合グラフィックス)
 【サウンド機能】High Definition Audio subsystem
 【無線LAN】IEEE802.11 ac/a/b/g/n対応ワイヤレスLAN + Bluetooth 4.2 [本体内蔵]
 【液晶ディスプレイ】15.6型 フルHD(1920×1080ドット)対応非光沢カラー液晶
 【スピーカー】内蔵ステレオスピーカー
 【WEBカメラ】100万画素カメラ搭載 [本体内蔵]
 【PCリサイクル】家庭系パソコン(PCリサイクル料金込み、回収再資源化料金不要)

拍手[0回]

【2018/12/10 21:19 】 | その他 | 有り難いご意見(0)
前ページ | ホーム | 次ページ

忍者ブログ [PR]