投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2019年11月16日土曜日

Thunderbirdで「winmail.dat」を開く方法について


■「winmail.dat」なるファイルの添付されたメールを受け取った。

Thunderbirdでメールを受信している。
稀に、相手先から「winmail.dat」という添付ファイルを受け取ることがある。

そのメールのヘッダーを確認すると、「X-Mailer: Microsoft Outlook 15.0」という文字列が含まれていた。
調べると、これは、Outlook 2013に対応するメーラーなので少し古い。


■「Winmail.dat」とは何か。

Thunderbirdのサポートサイトの情報によれば、
正しく設定されていない「Microsoft Outlook」からメールを送信すると、
「winmail.dat」というファイルが添付されるのだという。

この「winmail.dat」は、TNEF(マイクロソフト独自形式)を用いたメッセージに関する情報を保持している。
その場合、ユーザーによって添付されたファイルも一緒にこの中に納められる。
しかし、マイクロソフト以外のメールクライアントがこのようなメールを受信しても、通常は添付ファイルとして「winmail.dat」というファイルしか確認することができない。


■起こり得る問題について

受信者は相手先があたかも「winmail.dat」というファイルを意図して添付してきたと思うだろう。
そしてなんとか開こうとするが通常の方法では開けない。

そこで、相手先に、添付ファイルが開けないことについて問い合わせることになる。
冒頭で述べたとおり、正しく設定されていない「Microsoft Outlook」が自動的に、
「winmail.dat」というファイルを添付するのである。
送信者自身は、pdfだの通常のファイルを添付して確かに送信しているのであり、「winmail.dat」というファイルは送った覚えがない。

このため、お互いに原因不明のまま、
「開けないから、もう一度送ってほしい」
「送りますよ。開けましたか?」
「あれ、おかしいなあ」
のやりとりが続くことになる。


■Thunderbirdで「winmail.dat」に梱包されたオリジナルの添付ファイルを開く方法

Thunderbirdは、アドオン(追加ソフト)を組込むことによって、「winmail.dat」に対応する。

このアドオンの名前は、”LookOut”と言う。(OutLookではない。)

これは「winmail.dat」の添付されたメールを自動で認識して、
送信者が意図して添付したpdfなりのオリジナルのファイルを直接見せてくれるものである。


○アドオン”LookOut”の導入方法

1、ハンバーガーメニュー「≡」から、「アドオン」を選択する。



2、左欄から拡張機能を選び、双眼鏡アイコンのテキストボックスに、”lookout”と入力し、検索する。

次のイメージのように、アドオン”LookOut”が見つかるので、インストールする。



3、アドオンのインストール後、Thunderbirdを再起動する。

「今すぐ再起動する」をクリックした。



Thunderbirdが再起動した後、当該の「winmail.dat」を含んでいたメールを再び開くと、
今度は、送信者が意図して添付した元々のファイルの一覧を、添付ファイル欄に確認することができるようになった。



<参考>

・What is the winmail.dat attachment?
< https://support.mozilla.org/en-US/kb/what-winmaildat-attachment > 2019年11月16日

・Add-ons / LookOut (fix version) 2.0.0
< https://addons.thunderbird.net/en-US/thunderbird/addon/lookout-fix-version/ > 2019年11月16日

・Opening winmail.dat (TNEF) files in Thunderbird (on Ubuntu)
< https://blog.andrewbeacock.com/2007/07/opening-winmaildat-tnef-files-in.html > 2019年11月16日

・How email message formats affect Internet email messages in Outlook
< https://support.microsoft.com/en-us/help/290809/how-e-mail-message-formats-affect-internet-e-mail-messages-in-outlook > 2019年11月16日

・Outlook versions, build numbers and other trivia
< https://www.msoutlook.info/question/200 > 2019年11月16日

2019年11月15日金曜日

【Raspbian Buster September 2019】ショートカットをメニューに作成しアプリケーションローンチバーに追加する方法について


例えば、次のような組み合わせコマンドのためのショートカットを作成したい。

sudo /usr/bin/gnome-disks

ところで、上記の複合コマンドをパスワードなしで実行する方法については、
次のページを参照してください。
https://akira-arets.blogspot.com/2019/11/raspbian-buster2019sep-polkit.html



■メニューにショートカットを作成した。

○ショートカットで呼び出す。

いちいちターミナルを開かなくても良いように、
メニューにショートカットを登録することにした。

メニューの編集は次のコマンドで行った。
alacarte

NEW ITEMボタンから、アイテムを登録した。


上記のように、Commandのテキストボックスに、次のコマンドを設定した。
ショートカットの名称は適当に決めるとよい。
/usr/bin/sudo /usr/bin/gnome-disks
OKボタンで登録は完了するが、実際のメニューにアイテムを確認するには、
VNC Serverを利用している場合、VNC Serverの再起動が必要になった。

これで、いちいちパスワードを入力しなくても、
ディスクのフォーマットなどができるようになって便利になった。

しかし、この段階では、まだアイコンが表示されず、デフォルトのアイコンになっている。


○メニューショートカットにアイコンを表示させ、カテゴリを設定した。

まず、なぜ、アイコンが表示されないのか調べた。

メニューに表示されるようになったDisksと、Disks(privileged)の両方について、
メニュー上で右クリックして、「Add to desktop」を選び、ショートカットを作成した。

そして、それぞれの中身を次のように確認した。
URLという項目に注目する。
これがどこかリソースを参照することで情報を得ているのだろうと考えられる。
その結果、アイコンなどが表示されるのだと考えられる。
したがって、この参照先リソースを修正すればよいことになる。


(A) これはオリジナル(Disks)のデスクトップに作成したショートカットである。
mynewuser@raspberrypi:~/Desktop $ cat org.gnome.DiskUtility.desktop
[Desktop Entry]
Type=Link
Name=Disks
Icon=gnome-disks
URL=/usr/share/applications/org.gnome.DiskUtility.desktop

(B) 次に、Disks(privilege)のデスクトップに作成したショートカットである。
mynewuser@raspberrypi:~/Desktop $ cat alacarte-made.desktop
[Desktop Entry]
Type=Link
Name=Disks (privileged)
Icon=gnome-panel-launcher
URL=/home/mynewuser/.local/share/applications/alacarte-made.desktop

各々について、URLの参照先をcatコマンドで表示させた。

(a) まず、オリジナル(Disks)のリソースについて
mynewuser@raspberrypi:~/Desktop $ cat /usr/share/applications/org.gnome.DiskUtility.desktop
(略)
Icon=gnome-disks
Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Utility;X-GNOME-Utilities;
DBusActivatable=true
上記、オリジナル(Disks)の、Icon項目と、Categories項目に注目した。


(b) 次に、Disks(privilege)のリソースについて
mynewuser@raspberrypi:~/Desktop $ cat /home/mynewuser/.local/share/applications/alacarte-made.desktop
[Desktop Entry]
Comment=
Terminal=false
Name=Disks (privileged)
Exec=/usr/bin/sudo /usr/bin/gnome-disks
Type=Application
Icon=gnome-panel-launcher
NoDisplay=false
先と違ってIcon項目が異なり、Categories項目が存在していないことがわかった。
そこで、Disks(privilege)について、下記のように修正した。
[Desktop Entry]
Comment=
Terminal=false
Name=Disks (privileged)
Exec=/usr/bin/sudo /usr/bin/gnome-disks
Type=Application
Categories=GNOME;GTK;Utility;X-GNOME-Utilities;
Icon=gnome-disks

NoDisplay=false
そして再起動を行った。

すると、次のように、Disks(privileged)にDisksと同じアイコンが表示されるようになった。



○タスクバーランチャーにも追加した。

その上で、ようやくこれをタスクバーのアプリケーションランチャーに登録した。

1、まず、タスクバーで右クリックしてメニューを表示させ、「ADD / Remove Panel Items」を選択した。
すると、「Panel Preferences」というウインドウが開いた。右の「ADD」ボタンをクリックした。
すると、「Add Plugin to panel」ウインドウが開いた。「Application Launch Bar」を選択してから、下欄にある「ADD」をクリックした。



2、すると、次の写真のように、上右端に「+」アイコンが表示された。
これをクリックすると、「Application lauch Bar」というウインドウが開いた。


左側の欄には、「Disks(privileged)」というアイコン付の項目が表示された。
これを選択したうえ「ADD」ボタンを押すことで、+印と同じ同じ位置にディスクのアイコンが表示された。


3、前の「Panel Preferences」というウインドウの「UP」「DOWN」ボタンで、表示位置を変えることもできた。

追加した項目は、欄の下方(=タスクバー左端位置に対応)に存在している。
名前は、「Application Launch Bar」である。これを選択してから、「UP」ボタンで上方へ移動していく。
それにつれて、実際に、タスクバーの右側へと移動していく。



以上

2019年11月14日木曜日

【Raspbian Buster September 2019】リソースモニター「gnome-system-monitor」の導入

Raspbian Buster with desktop and recommended software(September 2019)には、
標準でCPUや動作プロセスを表示するアプリがインストールされていた。

しかし、以前から使用していたリソースモニターが見易いので別途導入することにした。
リソースモニターである「gnome-system-monitor」をインストールした。



○rootユーザーに切り替えてからインストール操作を行った。

# su
# apt-get install gnome-system-monitor
The following additional packages will be installed:
  libatkmm-1.6-1v5 libcairomm-1.0-1v5 libglibmm-2.4-1v5 libgtkmm-3.0-1v5
  libgtop-2.0-11 libgtop2-common libpangomm-1.4-1v5 libsigc++-2.0-0v5
The following NEW packages will be installed:
  gnome-system-monitor libatkmm-1.6-1v5 libcairomm-1.0-1v5 libglibmm-2.4-1v5
  libgtkmm-3.0-1v5 libgtop-2.0-11 libgtop2-common libpangomm-1.4-1v5
  libsigc++-2.0-0v5
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 2,616 kB of archives.
After this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

○インストール完了後、デスクトップのターミナルからコマンドを実行し起動した。

user@raspberrypi:~ $ gnome-system-monitor


gnome-system-monitorは見易いが、CPU使用率が5%程度上昇した。
このときは、同時に別に5%程度の使用率を占有するプログラムも動作させていた。



<参考>
・3.2. GNOME および KDE システムモニタ
< https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-analyzeperf-gnome > 2019年11月14日

・How to Install and Use GNOME System Monitor and Task Manager in Ubuntu
< https://vitux.com/how-to-install-and-use-task-manager-system-monitor-in-ubuntu/ > 2019年11月14日

2019年11月11日月曜日

【Raspbian Buster September 2019】古いタイプのSAMBAサーバーの共有フォルダをマウントする方法


■念の為、次のパッケージを導入しておいた。
(これらは不要かもしれないので、後に示すmount -t cifs コマンドでマウント可能か先に試してみること。)

# apt-get install samba-common smbclient samba-common-bin smbclient  cifs-utils



■Sambaサーバーに接続して、共有フォルダをマウントした。

Raspbian Buster September 2019 から、mount -t cifs を用いて、
CentOS 6のSAMBAサーバー(Ver. 3.6.23 43.el6_9)に接続するためには、
明示的に、vers=1.0と、sec=ntlmssp のオプションを付加しなければならなかった。

さもなければ、次のエラーが発生してサーバーへの接続に失敗した。
mount error(22): Invalid argument
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
あるいは、次のエラーが発生して失敗した。
mount error(2): No such file or directory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

いずれの場合も、次のように、オプションを指定すると問題なく接続でき、マウントに成功した。
root@raspberrypi:/home/pi# mount -t cifs //my-file-server.example.com/SHARENAME /mnt -o user=USERNAME,pass=PASSWORD,vers=1.0,sec=ntlmssp


Raspbian Buster September 2019 では、カーネルにおいて、SMBはversion 3がデフォルトになったらしい。
そのため、SMB3や、SMB2.1をサポートしていない古いタイプのSAMBAサーバーに接続するには、
上記のようにオプションを指定する必要がある。

エラー発生後に、dmesgコマンドで調べると、次のログが記載され同様の説明が行われていた。
[174413.609298] No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
[174413.653627] CIFS VFS: cifs_mount failed w/return code = -22


<参考>

・Pi 3B+ Samba client mount issues... mount error(22)
< https://www.raspberrypi.org/forums/viewtopic.php?t=209698 > 2019年11月11日

・Access network Samba share from Pi client
< https://raspberrypi.stackexchange.com/questions/40974/access-network-samba-share-from-pi-client > 2019年11月11日

2019年11月8日金曜日

【Raspbian Buster September 2019】(polkit、sudoers)デスクトップ環境でアプリが特権を行使できる方法について

通常ユーザーがroot権限でプログラムを動作させるための方法について

例えば、gnome-disksというGUIアプリケーションを用いれば、
フラッシュメモリーやハードディスク等のディスクに対して、
フォーマット、パーティションの作成など低レベルの操作ができる。

gnome-disksは次のようにパッケージを導入すれば利用ができた。
root@raspberrypi:/home/pi# apt-get install gnome-disk-utility

実際、デフォルトのpiユーザーだと、ログインパスワードの入力で、これらの操作を行うことができた
次の写真のように、piユーザー、rootユーザーのいずれかを選択し、
ログインパスワードを入力することで、特権の必要な操作ができた



(注意)
ただし、RealVNC Serverをsysytemdから利用している場合、
バグがあるようで、この認証機構であるpolkitが機能しなかった。
エラーが発生し、「Not authorized to perform operation (udisks-error-quark, 4)」となった。
tiger vnc serverではこのバグが報告されていた。
この問題を回避するには、最後で述べるように、sudoersを用いて特権動作させるとよかった。
ただし、systemdではなく、手動でvncserverコマンドで起動した場合、
polkitは正常に動作した。

ところが、作成した通常ユーザー(mynewuser)がgnome-disksを起動した場合、
上記写真に示す認証ウインドウのドロップダウンリストには、mynewuserの名称が存在しなかった。
piユーザー、rootユーザーのみであった。

では、いかにしてpiユーザーと同様に、認証ウインドウのドロップダウンリストに新規ユーザーの名称を載せられるのだろうか。



■無駄だったこと

以下のことは無駄だったので、真似をしないように。

そこで、mynewuserが属しているグループについて調べた。
mynewuser@raspberrypi:~ $ id mynewuser
uid=1001(mynewuser) gid=1001(mynewuser) groups=1001(mynewuser)
比較のために、デフォルトのpiユーザーについても調べた。
mynewuser@raspberrypi:~ $ id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),999(spi),998(i2c),997(gpio)
ちなみに、rootだとシンプルである。
mynewuser@raspberrypi:~ $ id root
uid=0(root) gid=0(root) groups=0(root)
一方、フラッシュメモリーのデバイスファイルを調べると、diskグループに読み書きが与えられていた。
mynewuser@raspberrypi:~ $ ls /dev/sda -al
brw-rw---- 1 root disk 8, 0 Nov  4 03:54 /dev/sda
そこで、次のようにしてmynewuserをdiskグループに属させたが、
効果がなかった。上記と同じエラーとなった。
root@raspberrypi:/home/pi# usermod -aG disk mynewuser

そこで、グループから解除した。
root@raspberrypi:/home/pi# gpasswd -d mynewuser disk
Removing user mynewuser from group disk
これで元通りである。



■認証用ウインドウのリストに、新規ユーザーが表示されるように設定

次のように専用のファイルを編集して、システムをリブートすることで可能だった。
新規ユーザーもこのように登録さえすれば、polkitを利用することができた。
認証用ウインドウのユーザー一覧にユーザー名が表示されるようになった。

root@raspberrypi:/home/pi# nano /etc/polkit-1/localauthority.conf.d/60-desktop-policy.conf
[Configuration]
AdminIdentities=unix-user:mynewuser;unix-user:pi;unix-user:0
root@raspberrypi:/home/pi# reboot



■polkit以外の方法として、sudoersを用いる

この方法だと、sysytemdからVNC Serverを起動している場合でも、
問題なく、指定済みのアプリケーションを特権で動作させることができた。


○まず、一番最後の行に、次のように特権で動作させたいコマンドについて記述した。
root@raspberrypi:/home/pi# visudo
(略)
mynewuser   ALL=(root) NOPASSWD: /usr/bin/gnome-disks
mynewuser   ALL=(root) NOPASSWD: /sbin/poweroff
mynewuser   ALL=(root) NOPASSWD: /sbin/reboot
そして、システムを再起動した。
root@raspberrypi:/home/pi# reboot


○動作テストを行った。
再起動後、GUIのターミナルで、次のようにコマンド起動すると、
パスワードの入力なしで特権でアプリケーションを動作できた。

$ sudo /usr/bin/gnome-disks


○ショートカット並びに、ランチャーに追加する。

次のページを参照してください。
https://akira-arets.blogspot.com/2019/11/raspbian-alacarte-launcher.html



<参考>

・Enforcing security of your Raspberry PI user accounts
< https://blog.hardcoding.fr/enforcing-security-raspberry-pi-user-accounts/ > 2019年11月7日

・How to create a new user on Raspbian powered Raspberry Pi
< https://blog.gyt.is/2016/03/01/how-to-create-a-new-user-on-raspbian-powered-raspberry-pi/ > 2019年11月7日

・How to Rename the Default Raspberry Pi User
< http://unixetc.co.uk/2016/01/07/how-to-rename-the-default-raspberry-pi-user/ > 2019年11月7日

・after adding a new user the LXTerminal starts without running bash
< https://www.raspberrypi.org/forums/viewtopic.php?t=203669 > 2019年11月7日

・visudoでsudo権限の設定をする際のメモ(sudoersの'ers'って何の略なんですかね?)
< https://qiita.com/kmikmy/items/6a6a086f6415d9b55b96 > 2019年11月8日


2019年11月4日月曜日

【Raspbian Buster September 2019】VNC Server virtualモードで、新規に作成したユーザーのリモートデスクトップ環境を個々に構築する


下記ページでは、デフォルトのpiユーザーのデスクトップをVNC Server Virtual モードで作成し、ヘッドレスで運用ができるようにした。
https://akira-arets.blogspot.com/2019/10/raspberry-pi-4-vncserver-virtual.html

今回は、その追試として、
作成した任意のユーザーでも同様にVNC Server Virtual モードによるデスクトップの構成を行った。
したがって、ほぼ内容は同じである。

結論としては、piユーザーと、以下で作成する新規ユーザーのデスクトップ環境を、
並列して動作させることができた。
また、それぞれのユーザーのデスクトップ環境は、systemctlコマンドを用いて、
独立して制御(start restart stop)できるようにした。



■新しいユーザーを作成した。

まず、rootユーザーに切り替えた。
(sudo passwd root コマンドで予めパスワードを設定している必要がある。)

pi@raspberrypi:~ $ su
Password:
次に、新規ユーザーを作成した。
root@raspberrypi:/home/pi# adduser mynewuser
Adding user `mynewuser' ...
Adding new group `mynewuser' (1001) ...
Adding new user `mynewuser' (1001) with group `mynewuser' ...
Creating home directory `/home/mynewuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for mynewuser
Enter the new value, or press ENTER for the default
        Full Name []: ←特に設定する必要がなかったので、空欄のままエンターを押下した。(以下同様)
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y


■VNCでこのユーザー専用のデスクトップにアクセスできるようにする。

○VNC Serverのパッケージについて

Raspbian では、既にVNCサーバーのパッケージはインストール済みだった。
もしもなければ、apt-get install realvnc-vnc-server で導入できる。


○VNCセッションでのマウスカーソルの形状を矢印型になるように設定

(この設定がなければ、×印のカーソルになった。)
nano /etc/vnc/xstartup
(略)
xsetroot -solid grey -cursor_name left_ptr(略)

CTRL+s で上書き保存、CTRL+x で終了する。


○作成したあたらしいユーザーでSSHログインのしなおし

一旦、現在のSSH接続を切断して、
新しく、SSHで新規作成ユーザーでRaspberry pi にログインしなおした。

$ ssh mynewuser@192.168.1.2

(注意)
上記のように、作成した新規ユーザーで新しくSSH接続をしなおすことは重要である。
なぜならもし、su mynewuser などとしてしまえば、以下のプロセスで次のようなエラーとなり、vnc serverの起動に失敗したからだ。

The virtual session failed to start. Session log:
XvncSession start time: 2019-11-03T17:40:33.510Z
pulseaudio not installed
Error: mkDir(/run/user/1000/session-xxxxxxxxxxxxxxxx): Permission denied (13)
[System-13]

○このユーザーのためのVNCパスワードを設定した。(-virtualを指定した。)
mynewuser@raspberrypi:~ $ vncpasswd -virtual
Setting "Password" VNC parameter for Virtual Mode server
Password:
Verify:

○vnc serverを一度だけ起動する。

上記のようにして新しく作成したユーザーでSSHでログイン後、
次のようにコマンドを実行した。
:3 は、ディスプレイ番号である。他のVNCユーザーと重ならないようにすること。

mynewuser@raspberrypi:~ $ /usr/bin/vncserver -Encryption PreferOff -Authentication VncAuth -geometry 1600x900 :3
VNC(R) Server 6.5.0 (r41824) ARMv6 (Aug 16 2019 00:24:44)
Copyright (C) 2002-2019 RealVNC Ltd.
RealVNC and VNC are trademarks of RealVNC Ltd and are protected by trademark
registrations and/or pending trademark applications in the European Union,
United States of America and other jurisdictions.
Protected by UK patent 2481870; US patent 8760366; EU patent 2652951.
See https://www.realvnc.com for information on VNC.
For third party acknowledgements see:
https://www.realvnc.com/docs/6/foss.html
OS: Raspbian GNU/Linux 10, Linux 4.19.75, armv7l
On some distributions (in particular Red Hat), you may get a better experience
by running vncserver-virtual in conjunction with the system Xorg server, rather
than the old version built-in to Xvnc. More desktop environments and
applications will likely be compatible. For more information on this alternative
implementation, please see: https://www.realvnc.com/doclink/kb-546
Running applications in /etc/vnc/xstartup
VNC Server catchphrase: "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
             signature: yy-yy-yy-yy-yy-yy-yy-yy
Log file is /home/mynewuser/.vnc/raspberrypi:3.log
New desktop is raspberrypi:3 (192.168.1.2:3)
(注意)
本当は、おそらく、上記結果中に、
Generating private key... done という情報が表示されるのだろうと思うが、
先に述べているように、su mynewuser などとしてvnc serverの起動をし損ねたときに、
既にそれらの処理が完了したために、ここでは表示されなかったと思う。

○VNCクライアントソフトウェアで接続テスト

ここで、VNCクライアントから接続テストをおこなった。
VNCクライアントの接続先指定において、
上記の最後に記されているアドレスとディスプレイ番号を指定し接続した。
192.168.1.2:3
これで、mynewuser専用のデスクトップにVNCで接続することができた。


○起動したVNCのプロセスをいったん終了

ディスプレイ番号を間違えないように注意すること。

mynewuser@raspberrypi:~ $ /usr/bin/vncserver -kill :3


○システム起動時にVNC Serverが起動するように設定

このユーザー専用のデスクトップがシステム起動時に自動的に準備されるように設定した。

rootユーザーに切り替えた。
pi@raspberrypi:~ $ su
Password:
このユーザー専用のVNC Serverを制御するための設定ファイルを作成した。
root@raspberrypi:/home/mynewuser# nano /usr/lib/systemd/system/vncserver-mynewuser.service
[Unit]
Description=VNC Server for user mynewuser in Virtual Mode daemon
After=network.target

[Service]
User=mynewuser   
Type=forking
#ExecStart=/usr/bin/vncserver -geometry 1600x900 :3
ExecStart=/usr/bin/vncserver -Encryption PreferOff -Authentication VncAuth -geometry 1600x900 :3
ExecStop=/usr/bin/vncserver -kill :3
Restart=on-failure
RestartSec=5
KillMode=process

[Install]
WantedBy=multi-user.target

上記設定ファイルを用いて自動起動されるようにセットした。
root@raspberrypi:/home/mynewuser# systemctl enable vncserver-mynewuser.service
Created symlink /etc/systemd/system/multi-user.target.wants/vncserver-mynewuser.service → /usr/lib/systemd/system/vncserver-mynewuser.service.

手動で、このユーザーのVNC serverを起動した。
(もし、vncserver-mynewuser.service を変更したなら、systemctl daemon-reload を行っておくこと。)
root@raspberrypi:/home/mynewuser# systemctl daemon-reload
root@raspberrypi:/home/mynewuser# systemctl start vncserver-mynewuser.service


ここで、再び、VNCクライアントから接続テストをおこなった。

VNCクライアントの接続先指定において、
上記の最後に記されているアドレスとディスプレイ番号を指定し接続した。
192.168.1.2:3
これで、mynewuser専用のデスクトップにVNCで接続することができた。

下記のように、No session for pid ・・・というエラー表示ウインドウが開いたものの、
特に気になる問題が生じることなく利用することができた。
(最後に注意点を記載した。)



このユーザーのデスクトップ環境は、次のコマンドで、再起動や停止も可能である。
root@raspberrypi:/home/mynewuser# systemctl restart vncserver-mynewuser.service
root@raspberrypi:/home/mynewuser# systemctl stop vncserver-mynewuser.service

(注意)
アプリケーションに特権を与えるpolkitが、
systemd経由でのReal VNC Server(virtualモード)ではうまく動作しなかった。
直接コンソールから、vncserverコマンドを起動する方法では問題なかった。
これを回避するために、sudoersを使った特権を与える方法について次のページに記載した。
https://akira-arets.blogspot.com/2019/11/raspbian-buster2019sep-polkit.html


○rebootコマンドが効くように設定

rebootコマンドを発行したところ、次のエラーが発生した。
mynewuser@raspberrypi:~ $ reboot
User pi is logged in on sshd.
User pi is logged in on tty1.
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl reboot -i'.

調べると、piユーザーがログインしていた。
これはおそらく自動ログインによるものだと思う。
自動ログインしないように試したが、うまくいかなかった。(多分、やり方がまずかったのだろう。)
mynewuser@raspberrypi:~ $ who
pi       tty1         2019-11-15 02:24


そこで、rebootコマンドをsudoで起動(パスワードなし)できるように設定した。
poweroffコマンドも同様に設定を行った。
下記、ページに記述してある。


次のようにコマンドを発行することで直ちに再起動できた。
$ sudo reboot

次のようにコマンドを発行することで直ちにシャットダウンできた。
$ sudo poweroff



<参考>

・【Raspbian Buster September 2019】VNC Serverを利用してユーザーごとのリモートデスクトップ環境を構築する
< https://akira-arets.blogspot.com/2019/10/raspberry-pi-4-vncserver-virtual.html > 2019年11月4日

2019年11月2日土曜日

【Linux CentOS 6】telnetでPOP3サーバーに接続しメールのタイトルを確認後に一括消去する手順


■fetchmailからSMTP転送された不正なヘッダーを持つメールがPostfixに拒否された

fetchmailを利用してPOP3サーバーからメールを取得して、それをPostfixへ転送する流れとなるはずだった。
しかし下記のログの通り、
fetchmailから転送された際にPostfixにおいて「Illegal address syntax」という警告が発せられ、失敗した。
fetchmaiは、「not flushed」と伝えたきりである。

fetchmaiのエラー「SMTP error: 501 5.1.7 Bad sender address syntax」からわかるように、
メールのヘッダーの送信者アドレスが不正な形式であることがわかった。
実際、調べてみると、xxxxxx@example.comのような形式になっていなかった。
こういうメールが、下記のログの通り、102件にもなっていて、
メールサーバーから削除されずに残存していた。

これでは困るので、処理できなかったメールをPOP3サーバーから一括消去したい。

postfix/smtpd[6510]: warning: Illegal address syntax from localhost[127.0.0.1] in MAIL command: <ここに不正な形式のアドレス>
fetchmail[6583]: reading message example@example.com:1 of 102 (17659 octets) (log message incomplete)
fetchmail[6583]: SMTP error: 501 5.1.7 Bad sender address syntax
fetchmail[6583]:  not flushed
postfix/smtpd[6510]: warning: Illegal address syntax from localhost[127.0.0.1] in MAIL command: <ここに不正な形式のアドレス>
fetchmail[6583]: reading message example@example.com:2 of 102 (8588 octets) (log message incomplete)
fetchmail[6583]: SMTP error: 501 5.1.7 Bad sender address syntax
fetchmail[6583]:  not flushed
postfix/smtpd[6510]: warning: Illegal address syntax from localhost[127.0.0.1] in MAIL command: <ここに不正な形式のアドレス>
fetchmail[6583]: reading message example@example.com:3 of 102 (3479 octets) (log message incomplete)
fetchmail[6583]: SMTP error: 501 5.1.7 Bad sender address syntax
fetchmail[6583]:  not flushed
<略>


■telnetでPOP3サーバーにアクセスし、残存するメールを確認し、削除する手順

方法は、telnetコマンドを利用して、直接POP3サーバーにログインし、
メール一覧を取得して不要なメールであることを確認してから、
一括で削除してしまう。

そこで、スクリプトを作成しtelnetコマンドを通して処理コマンドをPOP3サーバーに送出するようにした。
スクリプトは3種類用意した。以下で順に挙げていく。

1、サーバー内にあるメールのリスト番号を取得するためのコマンドを送出するスクリプト
2、各メールのヘッダーを取得するためのコマンドを送出するスクリプト
3、各メールを全て消去するためのコマンドを送出するスクリプト

ポイントは、これらのスクリプトはパイプでtelnetコマンドと組み合わせて使うことである。

$ script | telnet xxx.example.com 110 という基本の形式で用いるわけだ。

後で述べるように結果をさらにパイプで受けて処理するようなこともする。

telnetは、yum install telnet でインストールできた。



■スクリプトの実装と実際


○先ず、サーバー内にあるメールのリスト番号を取得しメールの件数を確認した。

スクリプト1を実装した。
サーバー内にあるメールのリスト番号を取得するためのコマンドをtelnetコマンドに送出するのに用いるスクリプトである。

$ ./LIST_POP3 | telnet xxx.example.com 110 という様に用いて、パイプでコマンドをtelnetに送る。

最初に、POP3サーバーにアクセスするまでに2秒の待機時間を設定している。
次に、USERコマンド名と、PASSコマンド名と共にログイン情報を送り、
各々処理のために待機時間も2秒設定している。(これは必須である。)
その上で、LISTコマンドを送出している。
全てのメールのリストを受け取るまで待機するように、5秒設定している。
そして、QUITで切断している。

必要に応じて、各待ち時間は調整した方が良い。


$ vi LIST_POP3
#!/bin/bash
username="myusername";
password="HereIsPassword";
sleep 2
echo USER $username
sleep 2
echo PASS $password
sleep 2
# Send LIST Command to Get list of mails
echo LIST

# Wait until all list is retrieved
sleep 5
echo QUIT

スクリプトに実行パーミッションを与えた。

$ chmod +x LIST_POP3


実際に用いると、次のようになった。

$ ./LIST_POP3 | telnet xxx.example.com 110
Trying xxx.xxx.xxx.xxx...
Connected to xxx.example.com.
Escape character is '^]'.
+OK <xxxxx.xxxxx@xxx.xxx.example.com>
+OK
+OK
+OK
1 17659
2 8588
3 3479
4 3376
5 4115
6 4579
7 9360
8 9427
9 8706
10 10263
11 9196
12 10253
13 10322
<略>
98 23229
99 23517
100 23439
101 23263
102 11367
. ←ここで設定した分だけの待ち時間
Connection closed by foreign host.

102通のメールが残存しているとわかった。



○そして、各々のメールの題名を確認した。

同様にしてまず、スクリプト2を実装した。
これはメールヘッダーを取得する。

下記、MAX_MESS=$1 の部分は、スクリプト実行時に指定した「最初の引数」を保存している。
そして、「最初の引数」には処理するべきメールの数を指定する。
ヘッダーを取得するためにループを利用しているのでループの回数として使用している。

(注意)
echo TOP $j 0 のところは、TOPコマンドを受け付けないPOP3サーバの場合には、
echo RETR $j を用いてメール全文を取得しても良い。

$ vi TOP_POP3
#!/bin/bash
username="myusername";
password="HereIsPassword";
MAX_MESS=$1
[ $# -eq 0 ] && exit 1 || :
sleep 2
echo USER $username
sleep 2
echo PASS $password
sleep 2
for (( j = 1 ; j <= $MAX_MESS; j++ ))
do
#Send command to get header of a mail
echo TOP $j 0

sleep 1
done

echo QUIT

スクリプトに実行パーミッションを与えた。

$ chmod +x TOP_POP3

このように作成したスクリプトとtelnetとを組み合わせ、メールサーバーにコマンドを送出し、
そして、さらにその結果をパイプで繋いで、grepで「Subject:」を抽出した。
これにより、メールのタイトルを表示することができた。

指定している102は、前述の通り処理するべきメール数である。

$ ./TOP_POP3 102 | telnet xxx.example.com 110 | grep Subject:
Subject: Wow, what a handsome...
Subject: What are your plans for tomorrow?
Subject: what are we going to do?
Subject: I could not resist and pass by!
Subject: You seem to know how to make a girl turn on...
Subject: God, how many fantasies you awake in my head!
Subject: can you meet me
Subject: I'm asking you
Subject: Interestingly, are you as cool in the conversation as on the photo?
Subject: let's do it tomorrow
Subject: can you meet me tomorrow?
Subject: It's incredibly confusing and drives me on simultaneously. Watch until I removed it from the access.
Subject: Oh, where have you been all my life!
Subject: That's why I love our parties! Just look here
Subject: I would like to ask you
Subject: can you meet me
Subject: Is your character as hard as your muscles?
Subject: What are we going to do today?
Subject: let's do it today
Subject: Remind myself
Subject: =?iso-2022-jp?B?GyRCIVobKEIyMDE5GyRCRy8bKEI1GyRCN24hW0BBNWEzWyROJDRPIk1tGyhC?=
Subject: Me and this bottle of red wine ;)
Subject: can we schedule an appointment for tomorrow?
Subject: could you meet me tomorrow?
Subject: Not sure, it had to be spread in the network, but it's a little late. Rate here
Subject: Wow, what a handsome...
<略>
Subject: what are your plans for the weekend?
Subject: Haven't you seen it yet? Oh hell, and why I have not found it before
Subject: I want to meet you today
Subject: =?utf-8?B?44GC44Gq44Gf44Gv6Ieq55Sx44Gg77yf?=
Connection closed by foreign host.

タイトルがエンコードされて読めない場合は、
次のようにして解読すればよかった。

$ echo "=?iso-2022-jp?B?GyRCIVobKEIyMDE5GyRCRy8bKEI1GyRCN24hW0BBNWEzWyROJDRPIk1tGyhC?="  | nkf -mB
8♡躊桴」、0C【2019年5月】請求額のご連絡
$ echo "=?utf-8?B?44GC44Gq44Gf44Gv6Ieq55Sx44Gg77yf?=" | nkf -w8
あなたは自由だ?
$ echo "=?Shift_JIS?B?gXWJZYu/l82CzINHg2yDi4NNgVuBdoLwjYKC34LpiciKd5NJgsiO6JZAgqqM9opK?=" | nkf -B
「影響力のエネルギー」を高める科学的な手法が公開
$ echo "=?utf-8?B?Y2FuIHlvdSBtZWV0IG1l?=" | nkf -w8
can you meet me

このようにして、メールの題名からサーバ内のメールが全てジャンクメールであることを確認した。

次にこれらを一括して消去する。



○サーバー内のメールを全て消去した。

スクリプト3はメールを指定した件数だけ削除する。

最後のQUITコマンドの送出によって、実際にメールが削除される
そのためQUITコマンドがきちんとPOP3サーバーに伝達するように待ち時間を最後に設定した。

(注意)
最後の待ち時間のsleepを省くと、うまくメールが削除されなかった。

$ vi DELE_POP3
#!/bin/bash
username="myusername";
password="HereIsPassword";
MAX_MESS=$1
[ $# -eq 0 ] && exit 1 || :
sleep 2
echo USER $username
sleep 2
echo PASS $password
sleep 2
for (( j = 1 ; j <= $MAX_MESS; j++ ))
do
# !!!! Send Command to delete a mail !!!!
echo DELE $j
sleep 1
done
echo QUIT
sleep 5

スクリプトに実行パーミッションを与えた。

$ chmod +x DELE_POP3


次のようにして用いる。メールが102件削除された。

# ./DELE_POP3 102 | telnet xxx.example.com 110
Trying xxx.xxx.xxx.xxx...
Connected to xxx.example.com.
Escape character is '^]'.
+OK <xxxxx.xxxxx@xxx.xxx.example.com>
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
<略>
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
Connection closed by foreign host.

削除されたかを確認するには、最初のコマンドをもう一度実行すれば良い。

$ ./LIST_POP3 | telnet xxx.example.com 110
Trying xxx.xxx.xxx.xxx...
Connected to xxx.example.com.
Escape character is '^]'.
+OK <xxxxx.xxxxx@xxx.xxx.example.com>
+OK
+OK
+OK
.
Connection closed by foreign host.

以上



<参考>
・Remove or Delete all emails message from a POP3 server
< https://www.cyberciti.biz/tips/remove-or-delete-all-emails-message-from-a-pop3-server.html > 2019年10月30日

・nkfで文字コード変換したいときはこうする!!
< https://qiita.com/hirohiro77/items/9e57fff12a3ef0907594 > 2019年10月30日

・【Linux CentOS 7 (1511)】nkfコマンドを使って文字化けしたメールの内容を解読する方法
< http://akira-arets.blogspot.com/2016/12/linux-nkf-makes-mojibake-be-right.html > 2019年10月30日

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad