Skip to main content

Posts about windows

Bluetooth tethering on Windows10

connect

  1. Pairing
  2. To open Bluetooth Personal Area Network Device, right click the blootooth icon in the system tray and click Join a Personal Area Network. You can create a shortcut to it where you like.
  3. Right click the icon of your router device and select Connect using then click Access Point

If you use an iphone as your router device, you don't have to tap 'internet sharing' when you start bluetooth tethering.

disconnect

  1. Open Bluetooth Personal Area Network Device
  2. Right click the icon of your router device and click disconnect

data usage limit

When we use wifi on windows, we have configuration for metered connection but we don't generally when blootooth pan.

I heard that it would be possible to limit data usage by editing registry.

  1. run regedit
  2. open HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost
  3. get full control of it for administrators
  4. change value of Ethernet to 2
  5. restart windows

This configures also ethernet to metered connection.

WSL2 installation

I followed the document Windows Subsystem for Linux Installation Guide for Windows 10 My environment is Windows 10 Pro 20H2 OS build 19042.685

Run powershell.exe as administrator. Then enable the Windows Subsystem for Linux.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

And enable Virtual Machine feature

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Download the Linux kernel update package and install it. - WSL2 Linux kernel update package for x64 machines

Set WSL 2 as the default version

wsl --set-default-version 2

Install Linux distribution from Microsoft Store Then launch it.

I could not launch it for a long time because of bug of COMODO Internet Security shown at WSL2 Converstion Failed with Error: 0x80041002 COMODO released new version for fixing it

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: xxxx
New password:
Retype new password:
passwd: 
password updated successfully
Installation successful!

$ uname -a
Linux xxxxxxxxxxxxxxx 4.19.128-microsoft-standard #1 SMP Tue Jun 23 12:58:10 UTC 2020 x86_64 GNU/Linux

$ cat /etc/debian_version
10.8

$ df -k
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sdb       263174212   280972 249455084   1% /
tmpfs            3161096        0   3161096   0% /mnt/wsl
tools          248559384 53031224 195528160  22% /init
none             3158696        0   3158696   0% /dev
none             3161096        4   3161092   1% /run
none             3161096        0   3161096   0% /run/lock
none             3161096        0   3161096   0% /run/shm
none             3161096        0   3161096   0% /run/user
tmpfs            3161096        0   3161096   0% /sys/fs/cgroup
C:\            248559384 53031224 195528160  22% /mnt/c

From next time, we can launch it with command 'debian'. Also we can launch it with wsl command on command prompt or powershell.

> wsl --list --verbose
NAME      STATE           VERSION
* Debian    Stopped         2
> wsl -d Debian
> wsl -d Debian -e uname -a

We can omit distribution name for the default one.

> wsl
> wsl -e uname -a

We can just execute bash shell or bash shell script as below.

> bash
> bash -c "echo uname -a > test.sh"
> bash -c "./test.sh"

export and import a distribution

> wsl --export debian d:\debian.tar.gz
> wsl --import mydebian d:\wsl\ d:\debian.tar.gz
> wsl --list -v

set new distribution as a default one and set default user.

> wsl --set-default mydebian
> wsl
# If the user does not exist in this distribution, you have to create it.
echo -e "[user]\ndefault=myUsername" >> /etc/wsl.conf
exit
> wsl --shutdown
> wsl

delete distribution

> wsl --unregister debian-work
> wsl --list -v

install docker in wsl2 debian environment

We can install newest release as https://docs.docker.com/engine/install/debian/ But I prefered to install from debian package

sudo apt update
sudo apt install --no-install-recommends docker.io
sudo service docker start
sudo service docker status

At this point, I could not start dockerd. I followed this flow https://github.com/microsoft/WSL/discussions/4872#discussioncomment-99164

sudo touch /etc/fstab
sudo update-alternatives --set iptables  /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo service docker start
sudo service docker status

Succeeded to start dockerd.

sudo docker run --rm -it debian:bullseye-slim

resolve domain name lookup failure problem

This workaround resolve domain name lookup failure problem on WSL2 and docker container. https://github.com/microsoft/WSL/issues/4285#issuecomment-522201021

Add these lines in /etc/wsl.conf on your distribution

[network]
generateResolvConf = false

Then shutdown wsl2 and restart your distribution

> wsl --shutdown
> wsl --list -v

Recreate /etc/resolv.conf

$ sudo rm /etc/resolv.conf
$ echo "nameserver 1.1.1.1" > /etc/resolv.conf

Then shutdown wsl2 and restart your distribution again

> wsl --shutdown
> wsl --list -v

Confirm your setting and domain name lookup on your distribution and docker container.

$ cat /etc/resolv.conf
$ curl -I www.google.com

vhd

Windows can mount vhd file as a virtual drive. We can use it for application install space or document storage area.

When we create a vhd file on a flash memory, the memory should be formatted with ntfs format.

parted /dev/sdb print
parted /dev/sdb rm 1
parted /dev/sdb mkpart primary ntfs 0% 100%
mkfs.ntfs -Q /dev/sdb1
mount /dev/sdb1 /mnt

At first a raw image file, make label, and make partition.

dd if=/dev/zero of=file.img bs=1M count=0 seek=59000
losetup -f
losetup /dev/loop1 file.img
losetup -a
parted /dev/loop1 print
parted /dev/loop1 mklabel msdos
parted /dev/loop1 mkpart primary ntfs 0% 100%
losetup -d /dev/loop1

Then format the partition in ntfs format.

kpartx -a -v file.img
mkfs.ntfs -Q /dev/loop1p1
kpartx -d -v file.img

The vhd file must not be sparse file. So after we convert it to vhd format, then we should convert it to normal file.

cp --sparse=never file.img file_new.img
qemu-img convert -O vpc -o subformat=fixed,force_size=on file.img output.vhd
cp -pi --sparse=never output.vhd.sparse file.vhd

diskpart

In windows os, we can handle partition and filesystem with sub commands of diskpart command.

format usb drive

list volume
select volume=2
format fs=ntfs quick

create a vhd file and attach it

list volume
create vdisk file="d:\image.vhd" maximum=1024
select vdisk file="d:\image.vhd"
attach vdisk
list vdisk

create partition in the vhd file

select disk 2
list disk
create partition primary

format in ntfs and assign drive letter

list volume
select volume=3
format fs=ntfs quick
assign letter=e:

detach the vhd file

select vdisk file="d:\image.vhd"
detach vdisk
list vdisk

next time, just attach it

select vdisk file="d:\image.vhd"
attach vdisk
list vdisk

windows script host by jscript

スクリプトの呼び出し。 アイコンのダブルクリックや、アイコンへのドラッグ&ドロップでも起動できる。

cscript script.js //Nologo
wscript script.js //Nologo

メッセージの表示。cscript ... で実行するとターミナルに表示される。

WScript.Echo( "メッセージ" + foo);

バッチファイルを呼び出す

var openssl     = "C:\\Users\\public\\Documents\\bin\\openssl.exe";
var shell   = WScript.CreateObject("WScript.Shell");

try {
  oExec = shell.Exec( openssl + " version" );
  //oExec = shell.Exec( openssl + " --help" );
  while ( ! oExec.StdOut.AtEndOfStream ) {
    WScript.Echo(oExec.StdOut.readline());
  }
  while ( ! oExec.StdErr.AtEndOfStream ) {
    WScript.Echo(oExec.StdErr.readline());
  }
}
catch (e){ 
  WScript.Echo(e)
}

引数のぶんだけ繰り返して実行する

var objArgs = WScript.Arguments;
var fso     = new ActiveXObject("Scripting.FileSystemObject");
var file;

for (i = 0; i < objArgs.length; i++) {
  try {
    file = fso.GetFile( objArgs(i) );
    fin = fso.OpenTextFile(file, 1, false);
    while ( ! fin.AtEndOfStream ) {
      line = fin.readline();
      WScript.Echo(line);
    }
    fin.Close();
  }
  catch (e) {
    WScript.Echo(e);
  }
}

ファイルを開き一行ずつ読み込んで処理。

var objArgs = WScript.Arguments;
var fso     = new ActiveXObject("Scripting.FileSystemObject");
var file;
var fin;

for (i = 0; i < objArgs.length; i++) {
  try {
    file = fso.GetFile( objArgs(i) );
  }
  catch(e) {
    WScript.Echo(e);
    continue;
  }
  fin = fso.OpenTextFile(file, 1, false);
  while ( ! fin.AtEndOfStream ) {
      line = fin.readline();
      WScript.Echo(line);
  }
  fin.Close();
}

アクセスファイルを開き、マクロを呼び出す。

var dbfile='C:\\Users\\public\\Documents\\Database1.accdb';
var timeout = 500; // milliseconds
try {
  var AccessApp = new ActiveXObject( "Access.Application" );
  // AccessApp.Visible = true;
  WScript.Sleep( timeout );

  try {
    AccessApp.OpenCurrentDatabase( dbfile );
    WScript.Sleep( timeout );
    // マクロを実行する例
    // AccessApp.DoCmd.RunMacro( "マクロ名" );
  }
  catch(e) {
    WScript.Echo(e);
  }
  finally {
    AccessApp.CloseCurrentDatabase();
  }
}
catch(e) {
    WScript.Echo(e);
}
finally {
  AccessApp.Quit();
  AccessApp = null;
}

excel

var excelfile = "c:\\users\\public\\documents\\test.xlsm"
var updatelinks = true;
var readonly = true;

try {
  var ExcelApp = new ActiveXObject("Excel.Application");
  // ExcelApp.Visible = true;
  // ExcelApp.DisplayAlerts = true;

  try {
    // var book = ExcelApp.Workbooks.Open(excelfile);
    var book = ExcelApp.Workbooks.Open(excelfile, updatelinks, readonly);
    // マクロを実行する例
    ExcelApp.Run("マクロ名")

    // シートに記入して保存する例
    // var sheet = book.sheets(1);
    // sheet.Cells(2, 1).value = "message...";
    // book.Save();
  }
  catch(e) {
    WScript.Echo(e)
  }
  finally {
    book.Close();
  }
}
catch(e) {
  WScript.Echo(e)
}
finally {
  ExcelApp.Quit();
}

ms windows commands

カレントディレクトリの*txtに対して処理を繰り返して実行する

for /r . %i in (*txt) do type "%i" | sort
    バッチの中では%%のようにする。
    doの中の%iは、半角スペースを含むファイル名に展開される場合、ダブルクォーテーションで挟む。
    doの中にパイプを含むことができる。

複数のファイルを、指定したディレクトリに問い合わせ無しでコピーする。

xcopy /y *.txt distdir

ファイルのハッシュ値表示

certutil -hashfile ファイル名 [MD5|SHA1|SHA256]

base64エンコード/デコード

certutil -encode infile file.b64
    エンコードすると、pem形式のファイル(ヘッダ・フッタあり)が得られる。
certutil -decode file.b64 outfile
    デコードするファイルは、pem形式ではないものでOK。

シンボリックリンクの作成

コマンドプロンプトを「管理者で実行」で開いて実行
ディレクトリのリンクの作成と削除
mklink /d <link> <original>
rmdir <link>

共有ドライブのマウント、アンマウント

net use y:
net use y: \\server\share
永続設定 
net use y: \\server\share\dir /persistent:yes
net use y: /delete

date変数の部分文字列を切り出す例

set YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2%

その他稀にしか使わないけど便利なコマンド

画面解像度

desk.cpl

ネットワーク接続

ncpa.cpl

送るメニューを開く

start shell:sendto

スタートアップを開く

start shell:startup

IME2010ユーザ辞書ツール

C:\Program Files\Common Files\microsoft shared\IME14\IMEJP\IMJPDCT.EXE

時刻同期

w32tm /query /status /verbose

ディレクトリバックアップバッチ例

if exist z:\. net use z: /delete
if not exist z:\. net use z: \\backupserver\backupvol
set logfile=c:\log\copyall.log
xcopy \usr z:\usr\ /D /E /H /C /Y /R >> %logfile%

my favorite desktop tools for windows

Windowsで動くお気に入りのデスクトップツールを二つ、紹介します。

Clock Launcher

Clock Launcherは、たくさんの機能が付属したフリーのランチャーアプリです。

ランチャー機能以外に、自分は以下のような機能を使用しています。

  • クリップボード管理
  • デスクトップ付箋
  • カレンダー
  • デジタル時計
  • タイマー

ランチャー本体を操作してもランチャーメニューを表示できますが、 自分は、デスクトップの何もないところをダブルクリックするとランチャーメニューが起動するように設定しています。

普通のアプリケーションだけでなく、ユーザ辞書ツール(imjpdct.exe)や、自家製バッチ等を登録する等、とても便利に使わせてもらってます。

Virtual Desktop for Win32

Virtual Desktopはフリーの仮想デスクトップソフトです。

現在の最新バージョン(0.95)では、Windows7までの対応となっています。

デスクトップの拡張だけでなく、いくつか便利な機能があります。

  • 指定したウィンドウの半透明化。
  • ウィンドウの位置やサイズを数値で表示。
  • ウィンドウのスナップ。

広大なデスクトップを必要としている方や、ウィンドウの見た目が整理されていると作業効率改善に繋がると考えている方にはおすすめです。

WinMerge

お気に入りの差分表示ツール、WinMergeのご紹介です。

WinMergeは、Windowsで動作する、フリーの差分表示、マージツールです。が、自分は差分表示機能しか使いこなしておりません。

こちらも、PortableApps で、WinMerge Portable としても配布されています。

日本語化している方がいらっしゃるので、私は、日本語版のほうを使用しています。

次のような機能、特徴があります。

  • 3ファイル(ディレクトリ)の比較も可能。
  • シンタックスハイライト。
  • 各種文字コードに対応。
  • プラグインによるエクセルファイルの比較。
  • バッチファイル出力機能。

以前は別のツールを使用していたのですが、諸事情あって、乗り換えることになりました。空白や改行コードの違い等を無視するか、比較するか、必要に応じて細かく指定することができるので、とても便利です。

差分表示をGitHub同様のカラースキーマに設定することができます。GitHubに慣れている方には良いのではないでしょうか。(自分はGitHubを使いこなしてはいませんが、自分には見やすいです。)

エクセルファイルの比較は思った以上に便利です。お勧めです。

PuTTY

もう一つのお気に入りのターミナルソフト、PuTTYのご紹介です。

PuTTYは、Windowsまたは、Unxで動作するフリーのターミナルエミュレータです。(ここではWindows版についての情報を掲載します。Unx版については触れません。)

PortableApps で、 PuTTY Portable としても配布されています。 (PortableAppsは、アプリをUSBメモリ等にインストールして持ち運んで、いつもと異なる端末でも、いつもと同じような環境で作業できるようにするというプロジェクトです。)

日本語化している方がいらっしゃるので、私は、日本語版(PuTTYjp)を使用しています。

(私ごとですが、よく見かける"有志の方がxxしている"という表現がどうにも好きではありません。酸っぱいスメルを感じてぞわぞわします。)

次のような機能、特徴があります。

  • telnet、シリアル、ssh接続等。
  • GUIのPuTTY本体(putty.exe)だけでなく、コマンドライン用のsshクライアント(plink.exe)が付属している。
  • scp(pscp.exe)、sftp(psftp.exe)等のコマンドラインツールが付属している。
  • フルスクリーン表示ができる。 (スクロールやタイトルバー等が表示されなくなり、画面全体でターミナル画面を表示するようになる)

特にコマンドラインツールが付属しているのがありがたいです。オプション指定が、un*xのコマンドのものに似ていますので、直感的に使うことができます。ポート転送やscpファイル転送のバッチの作成に大いに役立っています。

TeraTermでもscpファイル転送できますが、やはりPuTTYの同梱ツールを使ったほうがよろしいのではないかと個人的には思います。 (WinSCPという、ファイル転送に特化したGUIツールもあります。自分はあまり使ったことがありません。)

TeraTerm

お気に入りの、というか、定番のターミナルソフト、TeraTermのご紹介です。

TeraTermは、Windowsで動作するフリーのターミナルエミュレータです。

ネットワーク・コンピュータ関連業界界隈の方だったら使ったことが無い人はいないのではないか、というくらいの定番ですね。毎日のようにお世話になっております。

次のような機能、特徴があります。

  • telnet、シリアル、ssh接続等。
  • sshポート転送。
  • scpによるファイル転送。
  • 各種日本語文字コードに対応
  • 非常に高機能なマクロ機能。
  • 作業ログ保存

後述する予定のPuTTyも便利ではあるのですが、ログの保存が思ったようにできないことがあるため、使用する場面が限られてしまいます。

一方、こちらのTeraTermは、自分にとっては、非の打ちどころがほとんどありません。

機能追加の希望があるとすれば、Linux等のターミナルソフトでよくあるような、タブ切り替え機能が標準で使えるようになると嬉しいかもしれません。

ペースト(貼り付け)操作について

TeraTermでは、ペーストのショートカットはAlt+Vになっています。

Ctrl+Vが使えなくて不便だと感じてる方もいるかもしれませんが、実はShift+Insでもペーストできるのを知ってますか?

Shift+Insは、Windows標準であり、TeraTerm以外の他のソフトでも使うことができます。

また、WindowsだけでなくLinuxのコンソールやターミナルソフトでも利用することができます。身に着けておくと非常に便利ではないかと思います。

是非試してみてください。

sakura editor

お気に入りのフリーの高機能テキストエディタ、サクラエディタのご紹介です。

サクラエディタは、Windows で動作するタブ式のテキストエディタです。

次のような機能、特徴があります。

  • 多様な文字コード、改行コードに対応。 (un*xで作成したテキストファイルも問題なく編集することができます。)
  • 正規表現による検索。置換。 ("行頭が#で始まる行(#の前に空白があるものも含む)"などといった、複雑な指定が可能)
  • grep機能。タグジャンプ機能。 (複数のファイルから検索。みつけた場所にワンキーで移動可能)
  • 指定したキーワードの色分け。
  • 矩形編集。
  • キーボードマクロ。 (一連のキー操作の記録、保存。呼び出し。)
  • 選択範囲のソート、重複排除など。 (シェルを使わずに、エディタ内でsort | uniq ができる)
  • 動作が比較的軽い。

サクラエディタは非常に便利な機能が豊富で、割りと複雑な処理も実行できるため、日々、ありがたく使わせてもらっています。

いろんなことをエクセルで処理させる方もいらっしゃいますが、やはり使いなれたテキストエディタで処理した方が、手順が少なくなり、ミスの危険も少なくなるのではないかと思います。

是非テキストエディタの活用をおすすめします。