初めまして
ラズパイを利用して無線機の操作状態読み出し
GPSセンサーを用いて測位、PCとつないでこれらのデータのやりとり
やコントロールプログラムを作成しております。
そこでラズパイにはRTCもないこともあってGPSを用いた
時刻校正をしようと思っているのですが解決できない問題が
ありまして皆様のお知恵をかしてください
色々参考にしてなんとか作れたのですが
時刻校正をさせる際下記のダイアログが出て止まってしまいます
使用時はキーボードもマウスもつけずに画面のタッチパネルで
操作を行うのでパスワードの入力はできないのです
これを回避する方法がありましたらお願いします
ダイアログメッセージ
ネットワーク経由の時刻同期を有効もしくは無効
にするには認証が必要です
環境 ラズパイ4B VERSION 10.11 フルパッケージ
python3.7.3
GUI Tkinter
ソース
python
1def ft991_SET_GPS_TIME(): 2 global FT991 3 global GPS 4 msec10 = '10' 5 tz_ = 9 6 hour = GPS.U_gpstime[0:2] 7 minute = GPS.U_gpstime[2:4] 8 sec = GPS.U_gpstime[4:6] 9 year = GPS.U_gpsdate[0:2] 10 month = GPS.U_gpsdate[2:4] 11 day = GPS.U_gpsdate[4:6] 12 13 dt = datetime(2000 + int(year),int(month),int(day), 14 int(hour),int(minute),int(sec),int(msec10)*10000) + \ 15 timedelta(hours=tz_) 16 17 dtrmc = dt 18 #dtrmc = 20211205234512 19 gnsstime = dtrmc.strftime("%Y-%m-%d %H:%M:%S") 20 if( GPS.GPS_STABLE == 'A' ):#安定受信 21 if "Linux" in platform.system(): 22 print('if_gnsstime', gnsstime) 23 print('GPS.GPS_STABLE', GPS.GPS_STABLE) 24 subprocess.call(["/usr/bin/timedatectl", "set-ntp", "no"]) 25 subprocess.call(["/usr/bin/timedatectl", "set-time", gnsstime]) 26 subprocess.call(["/usr/bin/timedatectl","set-ntp","yes"])
以上よろしくお願いいたします。
pythonのコードの一番最初の行のすぐ上に
```python
だけの行を追加してください
また、pythonのコードの一番最後の行のすぐ下に
```
だけの行を追加してください
または、
https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif
を見て、そのようにしてみてください
現状、コードがとても読み辛いです
質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
ご指摘のとおり修正しました
なってないです
```python
(pythonのコード)
```
です
手入力すると違う文字を入力したりして間違いやすいので、ここからコピペしてください
ソース冒頭に ```python を付け加えました
コードが読みやすくなりました
https://unix.stackexchange.com/questions/496982/restarting-systemd-service-only-as-a-specific-user/497011
の「Answers」に、パスワード無しで「systemdサービス」を制御できる方法が書かれてます
https://self-development.info/%E3%80%90ubuntu%E3%80%91ntpdate%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8Ftimedatectl%E3%81%AB%E3%82%88%E3%82%8B%E6%99%82%E5%88%BB%E5%90%88%E3%82%8F%E3%81%9B/
によると「timedatectl」と「systemd-timesyncd」が連携してるとのことなので、パスワード無しで「systemdサービス」を制御できる方法が有効かもしれません
https://atmarkit.itmedia.co.jp/ait/articles/1906/13/news007.html#opt
の「timedatectlの主なオプション」
に、「--no-ask-password パスワードプロンプトを表示しない」がありました
これ指定するだけでいいなら、簡単なのですが
回答ありがとうございます
その後いろいろやって
まだ少ししか検証できてませんが
やっとできた感じです
下記の部分ですが
当初は検証中に
subprocess.call(["sudo /usr/bin/timedatectl", "set-ntp", "no"])
と書いてていたのですが間違っていました
subprocess.call(["sudo" , "/usr/bin/timedatectl", "set-ntp", "no"])
としたらパスワードの入力のプロンプトがでずにできるようになりました
ただしここで問題がありました
subprocess.call(["sudo" , "/usr/bin/timedatectl", "set-time", gnsstime])
の時刻の設定がたまにうまくいくのですが失敗してしまいました
調べてみるとNTPを無効に設定した後、数秒は手動の時刻設定ができないと
ありましてNTPを無効にして10秒ほど待機させたら無事にできるように
なりました
無事に何とか解決できてよかったです
それを回答に書いて、「自己解決」にしてください
そうすれば、同じことに悩んでる人が検索してここにたどり着いたら、役に立ちます
回答1件
あなたの回答
tips
プレビュー